commit 8d06c89a89757f7033888f8a2748ccb15e2222ec Author: alirezakarari Date: Sat Jan 9 20:53:13 2021 +0330 Init project diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..8d77a9f --- /dev/null +++ b/.eslintignore @@ -0,0 +1,8 @@ +/.nyc_output +/coverage +/node_modules +/tests/fixtures +/tests/integrations/eslint-plugin-import + +!.vuepress +/docs/.vuepress/dist \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4632f0d --- /dev/null +++ b/.gitignore @@ -0,0 +1,16 @@ +.rej +*.rej +*.orig +bin/ +.idea +node_modules/ +vuesax-laravel-starter/node_modules/ +temp/ +dist/ +versions/ +*.zip +/bin +package-lock.json +docs/.vuepress/dist/ +yarn.lock +scripts/ diff --git a/README.md b/README.md new file mode 100644 index 0000000..d950be3 --- /dev/null +++ b/README.md @@ -0,0 +1,27 @@ +# modern + +## Project setup +``` +npm install +``` + +### Compiles and hot-reloads for development +``` +برای رفتن به محیط کاربری می بایست + +``` + +### Compiles and minifies for production +``` +npm run build +``` + +### Run your tests +``` +npm run test +``` + +### Lints and fixes files +``` +npm run lint +``` diff --git a/auth_config.json b/auth_config.json new file mode 100644 index 0000000..a4a949f --- /dev/null +++ b/auth_config.json @@ -0,0 +1,4 @@ +{ + "domain": "YOUR_DOMAIN", + "clientId": "YOUR_CLIENT_ID" +} diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 0000000..df15158 --- /dev/null +++ b/babel.config.js @@ -0,0 +1,3 @@ +module.exports = { + presets: ['@vue/app'] +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..4939262 --- /dev/null +++ b/package.json @@ -0,0 +1,93 @@ +{ + "name": "vuexy-vuejs-html-laravel-dashboard-admin-template", + "version": "5.0.1", + "private": true, + "scripts": { + "serve": "vue-cli-service serve", + "build": "vue-cli-service build", + "lint": "vue-cli-service lint" + }, + "dependencies": { + "@chenfengyuan/vue-countdown": "^1.1.2", + "ag-grid-community": "^21.0.1", + "ag-grid-vue": "^21.0.1", + "algoliasearch": "^3.33.0", + "ant-design-vue": "^1.7.2", + "apexcharts": "^3.6.12", + "auth0-js": "^9.10.4", + "axios": "^0.19.2", + "axios-mock-adapter": "^1.19.0", + "chart.js": "^2.8.0", + "core-js": "2.6.5", + "echarts": "^4.2.1", + "eslint": "^7.14.0", + "eslint-loader": "^2.2.1", + "file-saver": "2.0.1", + "firebase": "^7.13.2", + "instantsearch.css": "^7.3.1", + "jalali-moment": "^3.3.8", + "jsonwebtoken": "^8.5.1", + "less-loader": "^6.2.0", + "lodash": "^4.17.19", + "material-icons": "^0.3.1", + "moment-jalaali": "^0.9.2", + "perfect-scrollbar": "^1.4.0", + "postcss-rtl": "1.5.0", + "prismjs": "^1.16.0", + "vee-validate": "^2.2.15", + "vue": "^2.6.10", + "vue-acl": "4.0.7", + "vue-apexcharts": "^1.3.5", + "vue-awesome-swiper": "^3.1.3", + "vue-backtotop": "^1.6.1", + "vue-chartjs": "^3.4.2", + "vue-clipboard2": "^0.3.0", + "vue-context": "4.0.0", + "vue-echarts": "^4.0.3", + "vue-feather-icons": "^5.0.0", + "vue-flatpickr-component": "^8.1.2", + "vue-form-wizard": "^0.8.4", + "vue-fullcalendar": "^1.0.9", + "vue-i18n": "^8.11.2", + "vue-instantsearch": "^2.2.1", + "vue-perfect-scrollbar": "^0.1.0", + "vue-persian-datetime-picker": "^2.4.0", + "vue-prism-component": "^1.1.1", + "vue-property-decorator": "^8.1.1", + "vue-quill-editor": "^3.0.6", + "vue-router": "^3.0.6", + "vue-select": "^3.1.0", + "vue-simple-calendar": "^4.2.2", + "vue-simple-suggest": "^1.9.5", + "vue-star-rating": "^1.6.1", + "vue-tour": "^1.1.0", + "vue-tree-halower": "^1.8.0", + "vue-video-player": "^5.0.2", + "vue2-google-maps": "^0.10.6", + "vue2-hammer": "^2.1.2", + "vuecode.js": "0.0.27", + "vuedraggable": "^2.21.0", + "vuejs-datepicker": "^1.5.4", + "vuesax": "3.11.13", + "vuex": "^3.1.1", + "xlsx": "^0.15.0" + }, + "devDependencies": { + "@fullhuman/postcss-purgecss": "^1.2.0", + "@vue/cli-plugin-babel": "^3.7.0", + "@vue/cli-plugin-eslint": "^3.9.1", + "@vue/cli-service": "^3.7.0", + "axios.mock-adapter": "^1.17.0", + "node-sass": "^4.12.0", + "purgecss": "^1.3.0", + "sass-loader": "^7.1.0", + "script-loader": "0.7.2", + "tailwindcss": "^1.0.1", + "vue-template-compiler": "^2.6.10" + }, + "description": "## Project setup ``` npm install ```", + "main": "babel.config.js", + "keywords": [], + "author": "", + "license": "ISC" +} diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..0c36c6f --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,7 @@ +module.exports = { + plugins: [ + require('tailwindcss'), + require('autoprefixer'), + //require('postcss-rtl') + ] +} diff --git a/public/animate.min.css b/public/animate.min.css new file mode 100644 index 0000000..76d2fe1 --- /dev/null +++ b/public/animate.min.css @@ -0,0 +1,7 @@ +@charset "UTF-8";/*! + * animate.css - https://animate.style/ + * Version - 4.1.1 + * Licensed under the MIT license - http://opensource.org/licenses/MIT + * + * Copyright (c) 2020 Animate.css + */:root{--animate-duration:1s;--animate-delay:1s;--animate-repeat:1}.animate__animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-duration:var(--animate-duration);animation-duration:var(--animate-duration);-webkit-animation-fill-mode:both;animation-fill-mode:both}.animate__animated.animate__infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.animate__animated.animate__repeat-1{-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-iteration-count:var(--animate-repeat);animation-iteration-count:var(--animate-repeat)}.animate__animated.animate__repeat-2{-webkit-animation-iteration-count:2;animation-iteration-count:2;-webkit-animation-iteration-count:calc(var(--animate-repeat)*2);animation-iteration-count:calc(var(--animate-repeat)*2)}.animate__animated.animate__repeat-3{-webkit-animation-iteration-count:3;animation-iteration-count:3;-webkit-animation-iteration-count:calc(var(--animate-repeat)*3);animation-iteration-count:calc(var(--animate-repeat)*3)}.animate__animated.animate__delay-1s{-webkit-animation-delay:1s;animation-delay:1s;-webkit-animation-delay:var(--animate-delay);animation-delay:var(--animate-delay)}.animate__animated.animate__delay-2s{-webkit-animation-delay:2s;animation-delay:2s;-webkit-animation-delay:calc(var(--animate-delay)*2);animation-delay:calc(var(--animate-delay)*2)}.animate__animated.animate__delay-3s{-webkit-animation-delay:3s;animation-delay:3s;-webkit-animation-delay:calc(var(--animate-delay)*3);animation-delay:calc(var(--animate-delay)*3)}.animate__animated.animate__delay-4s{-webkit-animation-delay:4s;animation-delay:4s;-webkit-animation-delay:calc(var(--animate-delay)*4);animation-delay:calc(var(--animate-delay)*4)}.animate__animated.animate__delay-5s{-webkit-animation-delay:5s;animation-delay:5s;-webkit-animation-delay:calc(var(--animate-delay)*5);animation-delay:calc(var(--animate-delay)*5)}.animate__animated.animate__faster{-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-duration:calc(var(--animate-duration)/2);animation-duration:calc(var(--animate-duration)/2)}.animate__animated.animate__fast{-webkit-animation-duration:.8s;animation-duration:.8s;-webkit-animation-duration:calc(var(--animate-duration)*0.8);animation-duration:calc(var(--animate-duration)*0.8)}.animate__animated.animate__slow{-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-duration:calc(var(--animate-duration)*2);animation-duration:calc(var(--animate-duration)*2)}.animate__animated.animate__slower{-webkit-animation-duration:3s;animation-duration:3s;-webkit-animation-duration:calc(var(--animate-duration)*3);animation-duration:calc(var(--animate-duration)*3)}@media (prefers-reduced-motion:reduce),print{.animate__animated{-webkit-animation-duration:1ms!important;animation-duration:1ms!important;-webkit-transition-duration:1ms!important;transition-duration:1ms!important;-webkit-animation-iteration-count:1!important;animation-iteration-count:1!important}.animate__animated[class*=Out]{opacity:0}}@-webkit-keyframes bounce{0%,20%,53%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0);transform:translateZ(0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0) scaleY(1.1);transform:translate3d(0,-30px,0) scaleY(1.1)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0) scaleY(1.05);transform:translate3d(0,-15px,0) scaleY(1.05)}80%{-webkit-transition-timing-function:cubic-bezier(.215,.61,.355,1);transition-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0) scaleY(.95);transform:translateZ(0) scaleY(.95)}90%{-webkit-transform:translate3d(0,-4px,0) scaleY(1.02);transform:translate3d(0,-4px,0) scaleY(1.02)}}@keyframes bounce{0%,20%,53%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0);transform:translateZ(0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0) scaleY(1.1);transform:translate3d(0,-30px,0) scaleY(1.1)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0) scaleY(1.05);transform:translate3d(0,-15px,0) scaleY(1.05)}80%{-webkit-transition-timing-function:cubic-bezier(.215,.61,.355,1);transition-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0) scaleY(.95);transform:translateZ(0) scaleY(.95)}90%{-webkit-transform:translate3d(0,-4px,0) scaleY(1.02);transform:translate3d(0,-4px,0) scaleY(1.02)}}.animate__bounce{-webkit-animation-name:bounce;animation-name:bounce;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}@keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}.animate__flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes pulse{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes pulse{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.animate__pulse{-webkit-animation-name:pulse;animation-name:pulse;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}@-webkit-keyframes rubberBand{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes rubberBand{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.animate__rubberBand{-webkit-animation-name:rubberBand;animation-name:rubberBand}@-webkit-keyframes shakeX{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}@keyframes shakeX{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}.animate__shakeX{-webkit-animation-name:shakeX;animation-name:shakeX}@-webkit-keyframes shakeY{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}20%,40%,60%,80%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}}@keyframes shakeY{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}20%,40%,60%,80%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}}.animate__shakeY{-webkit-animation-name:shakeY;animation-name:shakeY}@-webkit-keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}.animate__headShake{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-name:headShake;animation-name:headShake}@-webkit-keyframes swing{20%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}40%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}60%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}80%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes swing{20%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}40%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}60%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}80%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}.animate__swing{-webkit-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;animation-name:swing}@-webkit-keyframes tada{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate(-3deg);transform:scale3d(.9,.9,.9) rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(3deg);transform:scale3d(1.1,1.1,1.1) rotate(3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(-3deg);transform:scale3d(1.1,1.1,1.1) rotate(-3deg)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes tada{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate(-3deg);transform:scale3d(.9,.9,.9) rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(3deg);transform:scale3d(1.1,1.1,1.1) rotate(3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(-3deg);transform:scale3d(1.1,1.1,1.1) rotate(-3deg)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.animate__tada{-webkit-animation-name:tada;animation-name:tada}@-webkit-keyframes wobble{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}15%{-webkit-transform:translate3d(-25%,0,0) rotate(-5deg);transform:translate3d(-25%,0,0) rotate(-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate(3deg);transform:translate3d(20%,0,0) rotate(3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate(-3deg);transform:translate3d(-15%,0,0) rotate(-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate(2deg);transform:translate3d(10%,0,0) rotate(2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate(-1deg);transform:translate3d(-5%,0,0) rotate(-1deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes wobble{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}15%{-webkit-transform:translate3d(-25%,0,0) rotate(-5deg);transform:translate3d(-25%,0,0) rotate(-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate(3deg);transform:translate3d(20%,0,0) rotate(3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate(-3deg);transform:translate3d(-15%,0,0) rotate(-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate(2deg);transform:translate3d(10%,0,0) rotate(2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate(-1deg);transform:translate3d(-5%,0,0) rotate(-1deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__wobble{-webkit-animation-name:wobble;animation-name:wobble}@-webkit-keyframes jello{0%,11.1%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.390625deg) skewY(.390625deg);transform:skewX(.390625deg) skewY(.390625deg)}88.8%{-webkit-transform:skewX(-.1953125deg) skewY(-.1953125deg);transform:skewX(-.1953125deg) skewY(-.1953125deg)}}@keyframes jello{0%,11.1%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.390625deg) skewY(.390625deg);transform:skewX(.390625deg) skewY(.390625deg)}88.8%{-webkit-transform:skewX(-.1953125deg) skewY(-.1953125deg);transform:skewX(-.1953125deg) skewY(-.1953125deg)}}.animate__jello{-webkit-animation-name:jello;animation-name:jello;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes heartBeat{0%{-webkit-transform:scale(1);transform:scale(1)}14%{-webkit-transform:scale(1.3);transform:scale(1.3)}28%{-webkit-transform:scale(1);transform:scale(1)}42%{-webkit-transform:scale(1.3);transform:scale(1.3)}70%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes heartBeat{0%{-webkit-transform:scale(1);transform:scale(1)}14%{-webkit-transform:scale(1.3);transform:scale(1.3)}28%{-webkit-transform:scale(1);transform:scale(1)}42%{-webkit-transform:scale(1.3);transform:scale(1.3)}70%{-webkit-transform:scale(1);transform:scale(1)}}.animate__heartBeat{-webkit-animation-name:heartBeat;animation-name:heartBeat;-webkit-animation-duration:1.3s;animation-duration:1.3s;-webkit-animation-duration:calc(var(--animate-duration)*1.3);animation-duration:calc(var(--animate-duration)*1.3);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}@-webkit-keyframes backInDown{0%{-webkit-transform:translateY(-1200px) scale(.7);transform:translateY(-1200px) scale(.7);opacity:.7}80%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes backInDown{0%{-webkit-transform:translateY(-1200px) scale(.7);transform:translateY(-1200px) scale(.7);opacity:.7}80%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.animate__backInDown{-webkit-animation-name:backInDown;animation-name:backInDown}@-webkit-keyframes backInLeft{0%{-webkit-transform:translateX(-2000px) scale(.7);transform:translateX(-2000px) scale(.7);opacity:.7}80%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes backInLeft{0%{-webkit-transform:translateX(-2000px) scale(.7);transform:translateX(-2000px) scale(.7);opacity:.7}80%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.animate__backInLeft{-webkit-animation-name:backInLeft;animation-name:backInLeft}@-webkit-keyframes backInRight{0%{-webkit-transform:translateX(2000px) scale(.7);transform:translateX(2000px) scale(.7);opacity:.7}80%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes backInRight{0%{-webkit-transform:translateX(2000px) scale(.7);transform:translateX(2000px) scale(.7);opacity:.7}80%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.animate__backInRight{-webkit-animation-name:backInRight;animation-name:backInRight}@-webkit-keyframes backInUp{0%{-webkit-transform:translateY(1200px) scale(.7);transform:translateY(1200px) scale(.7);opacity:.7}80%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes backInUp{0%{-webkit-transform:translateY(1200px) scale(.7);transform:translateY(1200px) scale(.7);opacity:.7}80%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.animate__backInUp{-webkit-animation-name:backInUp;animation-name:backInUp}@-webkit-keyframes backOutDown{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:translateY(700px) scale(.7);transform:translateY(700px) scale(.7);opacity:.7}}@keyframes backOutDown{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:translateY(700px) scale(.7);transform:translateY(700px) scale(.7);opacity:.7}}.animate__backOutDown{-webkit-animation-name:backOutDown;animation-name:backOutDown}@-webkit-keyframes backOutLeft{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:translateX(-2000px) scale(.7);transform:translateX(-2000px) scale(.7);opacity:.7}}@keyframes backOutLeft{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:translateX(-2000px) scale(.7);transform:translateX(-2000px) scale(.7);opacity:.7}}.animate__backOutLeft{-webkit-animation-name:backOutLeft;animation-name:backOutLeft}@-webkit-keyframes backOutRight{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:translateX(2000px) scale(.7);transform:translateX(2000px) scale(.7);opacity:.7}}@keyframes backOutRight{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:translateX(2000px) scale(.7);transform:translateX(2000px) scale(.7);opacity:.7}}.animate__backOutRight{-webkit-animation-name:backOutRight;animation-name:backOutRight}@-webkit-keyframes backOutUp{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:translateY(-700px) scale(.7);transform:translateY(-700px) scale(.7);opacity:.7}}@keyframes backOutUp{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:translateY(-700px) scale(.7);transform:translateY(-700px) scale(.7);opacity:.7}}.animate__backOutUp{-webkit-animation-name:backOutUp;animation-name:backOutUp}@-webkit-keyframes bounceIn{0%,20%,40%,60%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes bounceIn{0%,20%,40%,60%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scaleX(1);transform:scaleX(1)}}.animate__bounceIn{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-duration:calc(var(--animate-duration)*0.75);animation-duration:calc(var(--animate-duration)*0.75);-webkit-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0) scaleY(3);transform:translate3d(0,-3000px,0) scaleY(3)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0) scaleY(.9);transform:translate3d(0,25px,0) scaleY(.9)}75%{-webkit-transform:translate3d(0,-10px,0) scaleY(.95);transform:translate3d(0,-10px,0) scaleY(.95)}90%{-webkit-transform:translate3d(0,5px,0) scaleY(.985);transform:translate3d(0,5px,0) scaleY(.985)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0) scaleY(3);transform:translate3d(0,-3000px,0) scaleY(3)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0) scaleY(.9);transform:translate3d(0,25px,0) scaleY(.9)}75%{-webkit-transform:translate3d(0,-10px,0) scaleY(.95);transform:translate3d(0,-10px,0) scaleY(.95)}90%{-webkit-transform:translate3d(0,5px,0) scaleY(.985);transform:translate3d(0,5px,0) scaleY(.985)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0) scaleX(3);transform:translate3d(-3000px,0,0) scaleX(3)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0) scaleX(1);transform:translate3d(25px,0,0) scaleX(1)}75%{-webkit-transform:translate3d(-10px,0,0) scaleX(.98);transform:translate3d(-10px,0,0) scaleX(.98)}90%{-webkit-transform:translate3d(5px,0,0) scaleX(.995);transform:translate3d(5px,0,0) scaleX(.995)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0) scaleX(3);transform:translate3d(-3000px,0,0) scaleX(3)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0) scaleX(1);transform:translate3d(25px,0,0) scaleX(1)}75%{-webkit-transform:translate3d(-10px,0,0) scaleX(.98);transform:translate3d(-10px,0,0) scaleX(.98)}90%{-webkit-transform:translate3d(5px,0,0) scaleX(.995);transform:translate3d(5px,0,0) scaleX(.995)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0) scaleX(3);transform:translate3d(3000px,0,0) scaleX(3)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0) scaleX(1);transform:translate3d(-25px,0,0) scaleX(1)}75%{-webkit-transform:translate3d(10px,0,0) scaleX(.98);transform:translate3d(10px,0,0) scaleX(.98)}90%{-webkit-transform:translate3d(-5px,0,0) scaleX(.995);transform:translate3d(-5px,0,0) scaleX(.995)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0) scaleX(3);transform:translate3d(3000px,0,0) scaleX(3)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0) scaleX(1);transform:translate3d(-25px,0,0) scaleX(1)}75%{-webkit-transform:translate3d(10px,0,0) scaleX(.98);transform:translate3d(10px,0,0) scaleX(.98)}90%{-webkit-transform:translate3d(-5px,0,0) scaleX(.995);transform:translate3d(-5px,0,0) scaleX(.995)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0) scaleY(5);transform:translate3d(0,3000px,0) scaleY(5)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0) scaleY(.9);transform:translate3d(0,-20px,0) scaleY(.9)}75%{-webkit-transform:translate3d(0,10px,0) scaleY(.95);transform:translate3d(0,10px,0) scaleY(.95)}90%{-webkit-transform:translate3d(0,-5px,0) scaleY(.985);transform:translate3d(0,-5px,0) scaleY(.985)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0) scaleY(5);transform:translate3d(0,3000px,0) scaleY(5)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0) scaleY(.9);transform:translate3d(0,-20px,0) scaleY(.9)}75%{-webkit-transform:translate3d(0,10px,0) scaleY(.95);transform:translate3d(0,10px,0) scaleY(.95)}90%{-webkit-transform:translate3d(0,-5px,0) scaleY(.985);transform:translate3d(0,-5px,0) scaleY(.985)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}@keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}.animate__bounceOut{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-duration:calc(var(--animate-duration)*0.75);animation-duration:calc(var(--animate-duration)*0.75);-webkit-animation-name:bounceOut;animation-name:bounceOut}@-webkit-keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0) scaleY(.985);transform:translate3d(0,10px,0) scaleY(.985)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0) scaleY(.9);transform:translate3d(0,-20px,0) scaleY(.9)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0) scaleY(3);transform:translate3d(0,2000px,0) scaleY(3)}}@keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0) scaleY(.985);transform:translate3d(0,10px,0) scaleY(.985)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0) scaleY(.9);transform:translate3d(0,-20px,0) scaleY(.9)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0) scaleY(3);transform:translate3d(0,2000px,0) scaleY(3)}}.animate__bounceOutDown{-webkit-animation-name:bounceOutDown;animation-name:bounceOutDown}@-webkit-keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0) scaleX(.9);transform:translate3d(20px,0,0) scaleX(.9)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0) scaleX(2);transform:translate3d(-2000px,0,0) scaleX(2)}}@keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0) scaleX(.9);transform:translate3d(20px,0,0) scaleX(.9)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0) scaleX(2);transform:translate3d(-2000px,0,0) scaleX(2)}}.animate__bounceOutLeft{-webkit-animation-name:bounceOutLeft;animation-name:bounceOutLeft}@-webkit-keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0) scaleX(.9);transform:translate3d(-20px,0,0) scaleX(.9)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0) scaleX(2);transform:translate3d(2000px,0,0) scaleX(2)}}@keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0) scaleX(.9);transform:translate3d(-20px,0,0) scaleX(.9)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0) scaleX(2);transform:translate3d(2000px,0,0) scaleX(2)}}.animate__bounceOutRight{-webkit-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0) scaleY(.985);transform:translate3d(0,-10px,0) scaleY(.985)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0) scaleY(.9);transform:translate3d(0,20px,0) scaleY(.9)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0) scaleY(3);transform:translate3d(0,-2000px,0) scaleY(3)}}@keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0) scaleY(.985);transform:translate3d(0,-10px,0) scaleY(.985)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0) scaleY(.9);transform:translate3d(0,20px,0) scaleY(.9)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0) scaleY(3);transform:translate3d(0,-2000px,0) scaleY(3)}}.animate__bounceOutUp{-webkit-animation-name:bounceOutUp;animation-name:bounceOutUp}@-webkit-keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.animate__fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInDownBig{-webkit-animation-name:fadeInDownBig;animation-name:fadeInDownBig}@-webkit-keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}@-webkit-keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInRightBig{-webkit-animation-name:fadeInRightBig;animation-name:fadeInRightBig}@-webkit-keyframes fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInUpBig{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes fadeInTopLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,-100%,0);transform:translate3d(-100%,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInTopLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,-100%,0);transform:translate3d(-100%,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInTopLeft{-webkit-animation-name:fadeInTopLeft;animation-name:fadeInTopLeft}@-webkit-keyframes fadeInTopRight{0%{opacity:0;-webkit-transform:translate3d(100%,-100%,0);transform:translate3d(100%,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInTopRight{0%{opacity:0;-webkit-transform:translate3d(100%,-100%,0);transform:translate3d(100%,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInTopRight{-webkit-animation-name:fadeInTopRight;animation-name:fadeInTopRight}@-webkit-keyframes fadeInBottomLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,100%,0);transform:translate3d(-100%,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInBottomLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,100%,0);transform:translate3d(-100%,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInBottomLeft{-webkit-animation-name:fadeInBottomLeft;animation-name:fadeInBottomLeft}@-webkit-keyframes fadeInBottomRight{0%{opacity:0;-webkit-transform:translate3d(100%,100%,0);transform:translate3d(100%,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInBottomRight{0%{opacity:0;-webkit-transform:translate3d(100%,100%,0);transform:translate3d(100%,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInBottomRight{-webkit-animation-name:fadeInBottomRight;animation-name:fadeInBottomRight}@-webkit-keyframes fadeOut{0%{opacity:1}to{opacity:0}}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}.animate__fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutDown{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes fadeOutDown{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.animate__fadeOutDown{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutDownBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes fadeOutDownBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.animate__fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}@-webkit-keyframes fadeOutLeft{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes fadeOutLeft{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.animate__fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutLeftBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes fadeOutLeftBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.animate__fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}@-webkit-keyframes fadeOutRight{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes fadeOutRight{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.animate__fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutRightBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes fadeOutRightBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.animate__fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}@-webkit-keyframes fadeOutUp{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes fadeOutUp{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.animate__fadeOutUp{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeOutUpBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes fadeOutUpBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.animate__fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}@-webkit-keyframes fadeOutTopLeft{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(-100%,-100%,0);transform:translate3d(-100%,-100%,0)}}@keyframes fadeOutTopLeft{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(-100%,-100%,0);transform:translate3d(-100%,-100%,0)}}.animate__fadeOutTopLeft{-webkit-animation-name:fadeOutTopLeft;animation-name:fadeOutTopLeft}@-webkit-keyframes fadeOutTopRight{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(100%,-100%,0);transform:translate3d(100%,-100%,0)}}@keyframes fadeOutTopRight{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(100%,-100%,0);transform:translate3d(100%,-100%,0)}}.animate__fadeOutTopRight{-webkit-animation-name:fadeOutTopRight;animation-name:fadeOutTopRight}@-webkit-keyframes fadeOutBottomRight{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(100%,100%,0);transform:translate3d(100%,100%,0)}}@keyframes fadeOutBottomRight{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(100%,100%,0);transform:translate3d(100%,100%,0)}}.animate__fadeOutBottomRight{-webkit-animation-name:fadeOutBottomRight;animation-name:fadeOutBottomRight}@-webkit-keyframes fadeOutBottomLeft{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(-100%,100%,0);transform:translate3d(-100%,100%,0)}}@keyframes fadeOutBottomLeft{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(-100%,100%,0);transform:translate3d(-100%,100%,0)}}.animate__fadeOutBottomLeft{-webkit-animation-name:fadeOutBottomLeft;animation-name:fadeOutBottomLeft}@-webkit-keyframes flip{0%{-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}@keyframes flip{0%{-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}.animate__animated.animate__flip{-webkit-backface-visibility:visible;backface-visibility:visible;-webkit-animation-name:flip;animation-name:flip}@-webkit-keyframes flipInX{0%{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInX{0%{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.animate__flipInX{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInX;animation-name:flipInX}@-webkit-keyframes flipInY{0%{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateY(-20deg);transform:perspective(400px) rotateY(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateY(10deg);transform:perspective(400px) rotateY(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateY(-5deg);transform:perspective(400px) rotateY(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInY{0%{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateY(-20deg);transform:perspective(400px) rotateY(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateY(10deg);transform:perspective(400px) rotateY(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateY(-5deg);transform:perspective(400px) rotateY(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.animate__flipInY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInY;animation-name:flipInY}@-webkit-keyframes flipOutX{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}}@keyframes flipOutX{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}}.animate__flipOutX{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-duration:calc(var(--animate-duration)*0.75);animation-duration:calc(var(--animate-duration)*0.75);-webkit-animation-name:flipOutX;animation-name:flipOutX;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}@-webkit-keyframes flipOutY{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateY(-15deg);transform:perspective(400px) rotateY(-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);opacity:0}}@keyframes flipOutY{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateY(-15deg);transform:perspective(400px) rotateY(-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);opacity:0}}.animate__flipOutY{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-duration:calc(var(--animate-duration)*0.75);animation-duration:calc(var(--animate-duration)*0.75);-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipOutY;animation-name:flipOutY}@-webkit-keyframes lightSpeedInRight{0%{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes lightSpeedInRight{0%{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__lightSpeedInRight{-webkit-animation-name:lightSpeedInRight;animation-name:lightSpeedInRight;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedInLeft{0%{-webkit-transform:translate3d(-100%,0,0) skewX(30deg);transform:translate3d(-100%,0,0) skewX(30deg);opacity:0}60%{-webkit-transform:skewX(-20deg);transform:skewX(-20deg);opacity:1}80%{-webkit-transform:skewX(5deg);transform:skewX(5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes lightSpeedInLeft{0%{-webkit-transform:translate3d(-100%,0,0) skewX(30deg);transform:translate3d(-100%,0,0) skewX(30deg);opacity:0}60%{-webkit-transform:skewX(-20deg);transform:skewX(-20deg);opacity:1}80%{-webkit-transform:skewX(5deg);transform:skewX(5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__lightSpeedInLeft{-webkit-animation-name:lightSpeedInLeft;animation-name:lightSpeedInLeft;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedOutRight{0%{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}@keyframes lightSpeedOutRight{0%{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}.animate__lightSpeedOutRight{-webkit-animation-name:lightSpeedOutRight;animation-name:lightSpeedOutRight;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes lightSpeedOutLeft{0%{opacity:1}to{-webkit-transform:translate3d(-100%,0,0) skewX(-30deg);transform:translate3d(-100%,0,0) skewX(-30deg);opacity:0}}@keyframes lightSpeedOutLeft{0%{opacity:1}to{-webkit-transform:translate3d(-100%,0,0) skewX(-30deg);transform:translate3d(-100%,0,0) skewX(-30deg);opacity:0}}.animate__lightSpeedOutLeft{-webkit-animation-name:lightSpeedOutLeft;animation-name:lightSpeedOutLeft;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes rotateIn{0%{-webkit-transform:rotate(-200deg);transform:rotate(-200deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateIn{0%{-webkit-transform:rotate(-200deg);transform:rotate(-200deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.animate__rotateIn{-webkit-animation-name:rotateIn;animation-name:rotateIn;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes rotateInDownLeft{0%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInDownLeft{0%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.animate__rotateInDownLeft{-webkit-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft;-webkit-transform-origin:left bottom;transform-origin:left bottom}@-webkit-keyframes rotateInDownRight{0%{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInDownRight{0%{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.animate__rotateInDownRight{-webkit-animation-name:rotateInDownRight;animation-name:rotateInDownRight;-webkit-transform-origin:right bottom;transform-origin:right bottom}@-webkit-keyframes rotateInUpLeft{0%{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInUpLeft{0%{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.animate__rotateInUpLeft{-webkit-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft;-webkit-transform-origin:left bottom;transform-origin:left bottom}@-webkit-keyframes rotateInUpRight{0%{-webkit-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInUpRight{0%{-webkit-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.animate__rotateInUpRight{-webkit-animation-name:rotateInUpRight;animation-name:rotateInUpRight;-webkit-transform-origin:right bottom;transform-origin:right bottom}@-webkit-keyframes rotateOut{0%{opacity:1}to{-webkit-transform:rotate(200deg);transform:rotate(200deg);opacity:0}}@keyframes rotateOut{0%{opacity:1}to{-webkit-transform:rotate(200deg);transform:rotate(200deg);opacity:0}}.animate__rotateOut{-webkit-animation-name:rotateOut;animation-name:rotateOut;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes rotateOutDownLeft{0%{opacity:1}to{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}}@keyframes rotateOutDownLeft{0%{opacity:1}to{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}}.animate__rotateOutDownLeft{-webkit-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft;-webkit-transform-origin:left bottom;transform-origin:left bottom}@-webkit-keyframes rotateOutDownRight{0%{opacity:1}to{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}@keyframes rotateOutDownRight{0%{opacity:1}to{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}.animate__rotateOutDownRight{-webkit-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight;-webkit-transform-origin:right bottom;transform-origin:right bottom}@-webkit-keyframes rotateOutUpLeft{0%{opacity:1}to{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}@keyframes rotateOutUpLeft{0%{opacity:1}to{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}.animate__rotateOutUpLeft{-webkit-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft;-webkit-transform-origin:left bottom;transform-origin:left bottom}@-webkit-keyframes rotateOutUpRight{0%{opacity:1}to{-webkit-transform:rotate(90deg);transform:rotate(90deg);opacity:0}}@keyframes rotateOutUpRight{0%{opacity:1}to{-webkit-transform:rotate(90deg);transform:rotate(90deg);opacity:0}}.animate__rotateOutUpRight{-webkit-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight;-webkit-transform-origin:right bottom;transform-origin:right bottom}@-webkit-keyframes hinge{0%{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate(80deg);transform:rotate(80deg);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate(60deg);transform:rotate(60deg);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}@keyframes hinge{0%{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate(80deg);transform:rotate(80deg);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate(60deg);transform:rotate(60deg);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}.animate__hinge{-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-duration:calc(var(--animate-duration)*2);animation-duration:calc(var(--animate-duration)*2);-webkit-animation-name:hinge;animation-name:hinge;-webkit-transform-origin:top left;transform-origin:top left}@-webkit-keyframes jackInTheBox{0%{opacity:0;-webkit-transform:scale(.1) rotate(30deg);transform:scale(.1) rotate(30deg);-webkit-transform-origin:center bottom;transform-origin:center bottom}50%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}70%{-webkit-transform:rotate(3deg);transform:rotate(3deg)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes jackInTheBox{0%{opacity:0;-webkit-transform:scale(.1) rotate(30deg);transform:scale(.1) rotate(30deg);-webkit-transform-origin:center bottom;transform-origin:center bottom}50%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}70%{-webkit-transform:rotate(3deg);transform:rotate(3deg)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.animate__jackInTheBox{-webkit-animation-name:jackInTheBox;animation-name:jackInTheBox}@-webkit-keyframes rollIn{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate(-120deg);transform:translate3d(-100%,0,0) rotate(-120deg)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes rollIn{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate(-120deg);transform:translate3d(-100%,0,0) rotate(-120deg)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__rollIn{-webkit-animation-name:rollIn;animation-name:rollIn}@-webkit-keyframes rollOut{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate(120deg);transform:translate3d(100%,0,0) rotate(120deg)}}@keyframes rollOut{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate(120deg);transform:translate3d(100%,0,0) rotate(120deg)}}.animate__rollOut{-webkit-animation-name:rollOut;animation-name:rollOut}@-webkit-keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}.animate__zoomIn{-webkit-animation-name:zoomIn;animation-name:zoomIn}@-webkit-keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomInDown{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomInLeft{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes zoomInRight{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInRight{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomInRight{-webkit-animation-name:zoomInRight;animation-name:zoomInRight}@-webkit-keyframes zoomInUp{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInUp{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomInUp{-webkit-animation-name:zoomInUp;animation-name:zoomInUp}@-webkit-keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}.animate__zoomOut{-webkit-animation-name:zoomOut;animation-name:zoomOut}@-webkit-keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomOutDown{-webkit-animation-name:zoomOutDown;animation-name:zoomOutDown;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0)}}@keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0)}}.animate__zoomOutLeft{-webkit-animation-name:zoomOutLeft;animation-name:zoomOutLeft;-webkit-transform-origin:left center;transform-origin:left center}@-webkit-keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0)}}@keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0)}}.animate__zoomOutRight{-webkit-animation-name:zoomOutRight;animation-name:zoomOutRight;-webkit-transform-origin:right center;transform-origin:right center}@-webkit-keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomOutUp{-webkit-animation-name:zoomOutUp;animation-name:zoomOutUp;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes slideInDown{0%{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInDown{0%{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__slideInDown{-webkit-animation-name:slideInDown;animation-name:slideInDown}@-webkit-keyframes slideInLeft{0%{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInLeft{0%{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__slideInLeft{-webkit-animation-name:slideInLeft;animation-name:slideInLeft}@-webkit-keyframes slideInRight{0%{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInRight{0%{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__slideInRight{-webkit-animation-name:slideInRight;animation-name:slideInRight}@-webkit-keyframes slideInUp{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInUp{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__slideInUp{-webkit-animation-name:slideInUp;animation-name:slideInUp}@-webkit-keyframes slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.animate__slideOutDown{-webkit-animation-name:slideOutDown;animation-name:slideOutDown}@-webkit-keyframes slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.animate__slideOutLeft{-webkit-animation-name:slideOutLeft;animation-name:slideOutLeft}@-webkit-keyframes slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.animate__slideOutRight{-webkit-animation-name:slideOutRight;animation-name:slideOutRight}@-webkit-keyframes slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.animate__slideOutUp{-webkit-animation-name:slideOutUp;animation-name:slideOutUp} \ No newline at end of file diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..13d5090 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..72fe64e --- /dev/null +++ b/public/index.html @@ -0,0 +1,31 @@ + + + + + + + + + + asco + + + +
+ +
+
+
+
+
+
+
+ +
+ + + diff --git a/public/loader.css b/public/loader.css new file mode 100644 index 0000000..d3f280d --- /dev/null +++ b/public/loader.css @@ -0,0 +1,79 @@ +#loading-bg{ + width: 100%; + height: 100%; + background: #FFF; + display: block; + position: absolute; +} +.loading-logo{ + position: absolute; + left: calc(50% - 45px); + top: 40%; +} +.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; +} +.loading .effect-1, .loading .effect-2{ + position: absolute; + width: 100%; + height: 100%; + border: 3px solid transparent; + border-left: 3px solid #1DA57A; + border-radius: 50%; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +.loading .effect-1{ + animation: rotate 1s ease infinite; +} +.loading .effect-2{ + animation: rotateOpacity 1s ease infinite .1s; +} +.loading .effect-3{ + position: absolute; + width: 100%; + height: 100%; + border: 3px solid transparent; + border-left: 3px solid #1DA57A; + -webkit-animation: rotateOpacity 1s ease infinite .2s; + animation: rotateOpacity 1s ease infinite .2s; + border-radius: 50%; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +.loading .effects{ + transition: all .3s ease; +} + +@keyframes rotate{ + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(1turn); + transform: rotate(1turn); + } +} +@keyframes rotateOpacity{ + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + opacity: .1; + } + 100% { + -webkit-transform: rotate(1turn); + transform: rotate(1turn); + opacity: 1; + } +} diff --git a/public/logo.png b/public/logo.png new file mode 100644 index 0000000..d5daccc Binary files /dev/null and b/public/logo.png differ diff --git a/public/logo.svg b/public/logo.svg new file mode 100644 index 0000000..d74cd04 --- /dev/null +++ b/public/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/logo2.png b/public/logo2.png new file mode 100644 index 0000000..46c3361 Binary files /dev/null and b/public/logo2.png differ diff --git a/public/logo_rah.png b/public/logo_rah.png new file mode 100644 index 0000000..9495103 Binary files /dev/null and b/public/logo_rah.png differ diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..88e5b96 --- /dev/null +++ b/src/App.vue @@ -0,0 +1,90 @@ + + + + + + diff --git a/src/acl/acl.js b/src/acl/acl.js new file mode 100644 index 0000000..b15d350 --- /dev/null +++ b/src/acl/acl.js @@ -0,0 +1,21 @@ +import Vue from 'vue' +import { AclInstaller, AclCreate, AclRule } from 'vue-acl' +import router from '@/router' + +Vue.use(AclInstaller) + +let initialRole = 'admin' + +const userInfo = JSON.parse(localStorage.getItem('userInfo')) +if (userInfo && userInfo.userRole) initialRole = userInfo.userRole + +export default new AclCreate({ + initial : initialRole, + notfound : '/pages/not-authorized', + router, + acceptLocalRules : true, + globalRules: { + admin : new AclRule('admin').generate(), + editor : new AclRule('editor').or('admin').generate() + } +}) diff --git a/src/assets/css/iconfont.css b/src/assets/css/iconfont.css new file mode 100644 index 0000000..245c9c4 --- /dev/null +++ b/src/assets/css/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/assets/css/loader.css b/src/assets/css/loader.css new file mode 100644 index 0000000..5b22aaa --- /dev/null +++ b/src/assets/css/loader.css @@ -0,0 +1,79 @@ +#loading-bg{ + width: 100%; + height: 100%; + background: #FFF; + display: block; + position: absolute; +} +.loading-logo{ + position: absolute; + left: calc(50% - 45px); + top: 40%; +} +.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; +} +.loading .effect-1, .loading .effect-2{ + position: absolute; + width: 100%; + height: 100%; + border: 3px solid transparent; + border-left: 3px solid #1DA57A; + border-radius: 50%; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +.loading .effect-1{ + animation: rotate 1s ease infinite; +} +.loading .effect-2{ + animation: rotateOpacity 1s ease infinite .1s; +} +.loading .effect-3{ + position: absolute; + width: 100%; + height: 100%; + border: 3px solid transparent; + border-left: 3px solid #1DA57A; + -webkit-animation: rotateOpacity 1s ease infinite .2s; + animation: rotateOpacity 1s ease infinite .2s; + border-radius: 50%; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +.loading .effects{ + transition: all .3s ease; +} + +@keyframes rotate{ + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(1turn); + transform: rotate(1turn); + } +} +@keyframes rotateOpacity{ + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + opacity: .1; + } + 100% { + -webkit-transform: rotate(1turn); + transform: rotate(1turn); + opacity: 1; + } +} \ No newline at end of file diff --git a/src/assets/css/main.css b/src/assets/css/main.css new file mode 100644 index 0000000..fba0794 --- /dev/null +++ b/src/assets/css/main.css @@ -0,0 +1,59 @@ +/** + * This injects Tailwind's base styles, which is a combination of + * Normalize.css and some additional base styles. + * + * You can see the styles here: + * https://github.com/tailwindcss/tailwindcss/blob/master/css/preflight.css + * + * If using `postcss-import`, you should import this line from it's own file: + * + * @import "./tailwind-preflight.css"; + * + * See: https://github.com/tailwindcss/tailwindcss/issues/53#issuecomment-341413622 + */ +/*NOTE: 'preflight' IS RENAMED TO 'base'*/ +/*@tailwind base;*/ + +/** + * Here you would add any of your custom component classes; stuff that you'd + * want loaded *before* the utilities so that the utilities could still + * override them. + * + * Example: + * + * .btn { ... } + * .form-input { ... } + * + * Or if using a preprocessor or `postcss-import`: + * + * @import "components/buttons"; + * @import "components/forms"; + */ + @tailwind components; + +/** + * This injects all of Tailwind's utility classes, generated based on your + * config file. + * + * If using `postcss-import`, you should import this line from it's own file: + * + * @import "./tailwind-utilities.css"; + * + * See: https://github.com/tailwindcss/tailwindcss/issues/53#issuecomment-341413622 + */ +@tailwind utilities; + +/** + * Here you would add any custom utilities you need that don't come out of the + * box with Tailwind. + * + * Example : + * + * .bg-pattern-graph-paper { ... } + * .skew-45 { ... } + * + * Or if using a preprocessor or `postcss-import`: + * + * @import "utilities/background-patterns"; + * @import "utilities/skew-transforms"; + */ diff --git a/src/assets/fonts/feather.eot b/src/assets/fonts/feather.eot new file mode 100644 index 0000000..58371d9 Binary files /dev/null and b/src/assets/fonts/feather.eot differ diff --git a/src/assets/fonts/feather.svg b/src/assets/fonts/feather.svg new file mode 100644 index 0000000..5dda143 --- /dev/null +++ b/src/assets/fonts/feather.svg @@ -0,0 +1,849 @@ + + + + + +Created by iconfont + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/fonts/feather.ttf b/src/assets/fonts/feather.ttf new file mode 100644 index 0000000..0b33dac Binary files /dev/null and b/src/assets/fonts/feather.ttf differ diff --git a/src/assets/fonts/feather.woff b/src/assets/fonts/feather.woff new file mode 100644 index 0000000..9b03a72 Binary files /dev/null and b/src/assets/fonts/feather.woff differ diff --git a/src/assets/fonts/yekan/bold.woff b/src/assets/fonts/yekan/bold.woff new file mode 100644 index 0000000..11d4a77 Binary files /dev/null and b/src/assets/fonts/yekan/bold.woff differ diff --git a/src/assets/fonts/yekan/heavy.woff b/src/assets/fonts/yekan/heavy.woff new file mode 100644 index 0000000..589c79b Binary files /dev/null and b/src/assets/fonts/yekan/heavy.woff differ diff --git a/src/assets/fonts/yekan/light.woff b/src/assets/fonts/yekan/light.woff new file mode 100644 index 0000000..0d32827 Binary files /dev/null and b/src/assets/fonts/yekan/light.woff differ diff --git a/src/assets/fonts/yekan/medium.woff b/src/assets/fonts/yekan/medium.woff new file mode 100644 index 0000000..57f5d14 Binary files /dev/null and b/src/assets/fonts/yekan/medium.woff differ diff --git a/src/assets/fonts/yekan/regular.woff b/src/assets/fonts/yekan/regular.woff new file mode 100644 index 0000000..46ba8c0 Binary files /dev/null and b/src/assets/fonts/yekan/regular.woff differ diff --git a/src/assets/images/background.jpg b/src/assets/images/background.jpg new file mode 100644 index 0000000..58ddefa Binary files /dev/null and b/src/assets/images/background.jpg differ diff --git a/src/assets/images/elements/decore-left.png b/src/assets/images/elements/decore-left.png new file mode 100644 index 0000000..9c99dd6 Binary files /dev/null and b/src/assets/images/elements/decore-left.png differ diff --git a/src/assets/images/elements/decore-right.png b/src/assets/images/elements/decore-right.png new file mode 100644 index 0000000..911ccd0 Binary files /dev/null and b/src/assets/images/elements/decore-right.png differ diff --git a/src/assets/images/file-icons/doc.png b/src/assets/images/file-icons/doc.png new file mode 100644 index 0000000..7c903cb Binary files /dev/null and b/src/assets/images/file-icons/doc.png differ diff --git a/src/assets/images/file-icons/jpg.png b/src/assets/images/file-icons/jpg.png new file mode 100644 index 0000000..bb254ff Binary files /dev/null and b/src/assets/images/file-icons/jpg.png differ diff --git a/src/assets/images/file-icons/pdf.png b/src/assets/images/file-icons/pdf.png new file mode 100644 index 0000000..5aa711e Binary files /dev/null and b/src/assets/images/file-icons/pdf.png differ diff --git a/src/assets/images/file-icons/xls.png b/src/assets/images/file-icons/xls.png new file mode 100644 index 0000000..cde1c31 Binary files /dev/null and b/src/assets/images/file-icons/xls.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/logo.png b/src/assets/images/flags/logo.png new file mode 100644 index 0000000..f89b776 Binary files /dev/null and b/src/assets/images/flags/logo.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/logo.svg b/src/assets/images/logo.svg new file mode 100644 index 0000000..d74cd04 --- /dev/null +++ b/src/assets/images/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/logo/favicon-backup.ico b/src/assets/images/logo/favicon-backup.ico new file mode 100644 index 0000000..c072116 Binary files /dev/null and b/src/assets/images/logo/favicon-backup.ico differ diff --git a/src/assets/images/logo/favicon.ico b/src/assets/images/logo/favicon.ico new file mode 100644 index 0000000..60a94e9 Binary files /dev/null and b/src/assets/images/logo/favicon.ico differ diff --git a/src/assets/images/logo/favicon.png b/src/assets/images/logo/favicon.png new file mode 100644 index 0000000..9e8a10e Binary files /dev/null and b/src/assets/images/logo/favicon.png differ diff --git a/src/assets/images/pages/1-apex.png b/src/assets/images/pages/1-apex.png new file mode 100644 index 0000000..139355f Binary files /dev/null and b/src/assets/images/pages/1-apex.png differ diff --git a/src/assets/images/pages/2-stack.png b/src/assets/images/pages/2-stack.png new file mode 100644 index 0000000..d6cb8b9 Binary files /dev/null and b/src/assets/images/pages/2-stack.png differ diff --git a/src/assets/images/pages/3-convex.png b/src/assets/images/pages/3-convex.png new file mode 100644 index 0000000..9095100 Binary files /dev/null and b/src/assets/images/pages/3-convex.png differ diff --git a/src/assets/images/pages/4-materialize.png b/src/assets/images/pages/4-materialize.png new file mode 100644 index 0000000..9b5d0b5 Binary files /dev/null and b/src/assets/images/pages/4-materialize.png differ diff --git a/src/assets/images/pages/404.png b/src/assets/images/pages/404.png new file mode 100644 index 0000000..d2bdcb6 Binary files /dev/null and b/src/assets/images/pages/404.png differ diff --git a/src/assets/images/pages/500.png b/src/assets/images/pages/500.png new file mode 100644 index 0000000..df9a4c8 Binary files /dev/null and b/src/assets/images/pages/500.png differ diff --git a/src/assets/images/pages/card-bg-image-demo-1.jpg b/src/assets/images/pages/card-bg-image-demo-1.jpg new file mode 100644 index 0000000..27da16d Binary files /dev/null and b/src/assets/images/pages/card-bg-image-demo-1.jpg differ diff --git a/src/assets/images/pages/card-bg-image-demo-2.jpg b/src/assets/images/pages/card-bg-image-demo-2.jpg new file mode 100644 index 0000000..21baedb Binary files /dev/null and b/src/assets/images/pages/card-bg-image-demo-2.jpg differ diff --git a/src/assets/images/pages/card-image-4.jpg b/src/assets/images/pages/card-image-4.jpg new file mode 100644 index 0000000..1529754 Binary files /dev/null and b/src/assets/images/pages/card-image-4.jpg differ diff --git a/src/assets/images/pages/card-image-5.jpg b/src/assets/images/pages/card-image-5.jpg new file mode 100644 index 0000000..a9f0572 Binary files /dev/null and b/src/assets/images/pages/card-image-5.jpg differ diff --git a/src/assets/images/pages/card-image-6.jpg b/src/assets/images/pages/card-image-6.jpg new file mode 100644 index 0000000..c974956 Binary files /dev/null and b/src/assets/images/pages/card-image-6.jpg differ diff --git a/src/assets/images/pages/card-img-overlay.jpg b/src/assets/images/pages/card-img-overlay.jpg new file mode 100644 index 0000000..0c3be31 Binary files /dev/null and b/src/assets/images/pages/card-img-overlay.jpg differ diff --git a/src/assets/images/pages/carousel/banner-1.jpg b/src/assets/images/pages/carousel/banner-1.jpg new file mode 100644 index 0000000..ae2695b Binary files /dev/null and b/src/assets/images/pages/carousel/banner-1.jpg differ diff --git a/src/assets/images/pages/carousel/banner-10.jpg b/src/assets/images/pages/carousel/banner-10.jpg new file mode 100644 index 0000000..22c3766 Binary files /dev/null and b/src/assets/images/pages/carousel/banner-10.jpg differ diff --git a/src/assets/images/pages/carousel/banner-11.jpg b/src/assets/images/pages/carousel/banner-11.jpg new file mode 100644 index 0000000..2e2d8d5 Binary files /dev/null and b/src/assets/images/pages/carousel/banner-11.jpg differ diff --git a/src/assets/images/pages/carousel/banner-12.jpg b/src/assets/images/pages/carousel/banner-12.jpg new file mode 100644 index 0000000..3890cac Binary files /dev/null and b/src/assets/images/pages/carousel/banner-12.jpg differ diff --git a/src/assets/images/pages/carousel/banner-13.jpg b/src/assets/images/pages/carousel/banner-13.jpg new file mode 100644 index 0000000..b61471f Binary files /dev/null and b/src/assets/images/pages/carousel/banner-13.jpg differ diff --git a/src/assets/images/pages/carousel/banner-14.jpg b/src/assets/images/pages/carousel/banner-14.jpg new file mode 100644 index 0000000..fc0f7b8 Binary files /dev/null and b/src/assets/images/pages/carousel/banner-14.jpg differ diff --git a/src/assets/images/pages/carousel/banner-15.jpg b/src/assets/images/pages/carousel/banner-15.jpg new file mode 100644 index 0000000..f39ef5f Binary files /dev/null and b/src/assets/images/pages/carousel/banner-15.jpg differ diff --git a/src/assets/images/pages/carousel/banner-16.jpg b/src/assets/images/pages/carousel/banner-16.jpg new file mode 100644 index 0000000..0e1f817 Binary files /dev/null and b/src/assets/images/pages/carousel/banner-16.jpg differ diff --git a/src/assets/images/pages/carousel/banner-17.jpg b/src/assets/images/pages/carousel/banner-17.jpg new file mode 100644 index 0000000..3dce218 Binary files /dev/null and b/src/assets/images/pages/carousel/banner-17.jpg differ diff --git a/src/assets/images/pages/carousel/banner-18.jpg b/src/assets/images/pages/carousel/banner-18.jpg new file mode 100644 index 0000000..9db655c Binary files /dev/null and b/src/assets/images/pages/carousel/banner-18.jpg differ diff --git a/src/assets/images/pages/carousel/banner-19.jpg b/src/assets/images/pages/carousel/banner-19.jpg new file mode 100644 index 0000000..36cba93 Binary files /dev/null and b/src/assets/images/pages/carousel/banner-19.jpg differ diff --git a/src/assets/images/pages/carousel/banner-2.jpg b/src/assets/images/pages/carousel/banner-2.jpg new file mode 100644 index 0000000..dcd280e Binary files /dev/null and b/src/assets/images/pages/carousel/banner-2.jpg differ diff --git a/src/assets/images/pages/carousel/banner-20.jpg b/src/assets/images/pages/carousel/banner-20.jpg new file mode 100644 index 0000000..77bd7b7 Binary files /dev/null and b/src/assets/images/pages/carousel/banner-20.jpg differ diff --git a/src/assets/images/pages/carousel/banner-21.jpg b/src/assets/images/pages/carousel/banner-21.jpg new file mode 100644 index 0000000..9f98bcf Binary files /dev/null and b/src/assets/images/pages/carousel/banner-21.jpg differ diff --git a/src/assets/images/pages/carousel/banner-22.jpg b/src/assets/images/pages/carousel/banner-22.jpg new file mode 100644 index 0000000..51476f6 Binary files /dev/null and b/src/assets/images/pages/carousel/banner-22.jpg differ diff --git a/src/assets/images/pages/carousel/banner-23.jpg b/src/assets/images/pages/carousel/banner-23.jpg new file mode 100644 index 0000000..5320356 Binary files /dev/null and b/src/assets/images/pages/carousel/banner-23.jpg differ diff --git a/src/assets/images/pages/carousel/banner-24.jpg b/src/assets/images/pages/carousel/banner-24.jpg new file mode 100644 index 0000000..10b88c5 Binary files /dev/null and b/src/assets/images/pages/carousel/banner-24.jpg differ diff --git a/src/assets/images/pages/carousel/banner-25.jpg b/src/assets/images/pages/carousel/banner-25.jpg new file mode 100644 index 0000000..91c390b Binary files /dev/null and b/src/assets/images/pages/carousel/banner-25.jpg differ diff --git a/src/assets/images/pages/carousel/banner-26.jpg b/src/assets/images/pages/carousel/banner-26.jpg new file mode 100644 index 0000000..21bf682 Binary files /dev/null and b/src/assets/images/pages/carousel/banner-26.jpg differ diff --git a/src/assets/images/pages/carousel/banner-27.jpg b/src/assets/images/pages/carousel/banner-27.jpg new file mode 100644 index 0000000..fd0aded Binary files /dev/null and b/src/assets/images/pages/carousel/banner-27.jpg differ diff --git a/src/assets/images/pages/carousel/banner-28.jpg b/src/assets/images/pages/carousel/banner-28.jpg new file mode 100644 index 0000000..6354d8f Binary files /dev/null and b/src/assets/images/pages/carousel/banner-28.jpg differ diff --git a/src/assets/images/pages/carousel/banner-29.jpg b/src/assets/images/pages/carousel/banner-29.jpg new file mode 100644 index 0000000..367d3a1 Binary files /dev/null and b/src/assets/images/pages/carousel/banner-29.jpg differ diff --git a/src/assets/images/pages/carousel/banner-3.jpg b/src/assets/images/pages/carousel/banner-3.jpg new file mode 100644 index 0000000..f6232e6 Binary files /dev/null and b/src/assets/images/pages/carousel/banner-3.jpg differ diff --git a/src/assets/images/pages/carousel/banner-30.jpg b/src/assets/images/pages/carousel/banner-30.jpg new file mode 100644 index 0000000..a334908 Binary files /dev/null and b/src/assets/images/pages/carousel/banner-30.jpg differ diff --git a/src/assets/images/pages/carousel/banner-31.jpg b/src/assets/images/pages/carousel/banner-31.jpg new file mode 100644 index 0000000..1d6bb3f Binary files /dev/null and b/src/assets/images/pages/carousel/banner-31.jpg differ diff --git a/src/assets/images/pages/carousel/banner-32.jpg b/src/assets/images/pages/carousel/banner-32.jpg new file mode 100644 index 0000000..3471202 Binary files /dev/null and b/src/assets/images/pages/carousel/banner-32.jpg differ diff --git a/src/assets/images/pages/carousel/banner-33.jpg b/src/assets/images/pages/carousel/banner-33.jpg new file mode 100644 index 0000000..a3a8e04 Binary files /dev/null and b/src/assets/images/pages/carousel/banner-33.jpg differ diff --git a/src/assets/images/pages/carousel/banner-34.jpg b/src/assets/images/pages/carousel/banner-34.jpg new file mode 100644 index 0000000..9c3fd0f Binary files /dev/null and b/src/assets/images/pages/carousel/banner-34.jpg differ diff --git a/src/assets/images/pages/carousel/banner-35.jpg b/src/assets/images/pages/carousel/banner-35.jpg new file mode 100644 index 0000000..f4b6a43 Binary files /dev/null and b/src/assets/images/pages/carousel/banner-35.jpg differ diff --git a/src/assets/images/pages/carousel/banner-37.jpg b/src/assets/images/pages/carousel/banner-37.jpg new file mode 100644 index 0000000..3b0adf4 Binary files /dev/null and b/src/assets/images/pages/carousel/banner-37.jpg differ diff --git a/src/assets/images/pages/carousel/banner-38.jpg b/src/assets/images/pages/carousel/banner-38.jpg new file mode 100644 index 0000000..506dee3 Binary files /dev/null and b/src/assets/images/pages/carousel/banner-38.jpg differ diff --git a/src/assets/images/pages/carousel/banner-39.jpg b/src/assets/images/pages/carousel/banner-39.jpg new file mode 100644 index 0000000..47ae47c Binary files /dev/null and b/src/assets/images/pages/carousel/banner-39.jpg differ diff --git a/src/assets/images/pages/carousel/banner-4.jpg b/src/assets/images/pages/carousel/banner-4.jpg new file mode 100644 index 0000000..67accea Binary files /dev/null and b/src/assets/images/pages/carousel/banner-4.jpg differ diff --git a/src/assets/images/pages/carousel/banner-40.jpg b/src/assets/images/pages/carousel/banner-40.jpg new file mode 100644 index 0000000..9fa94ff Binary files /dev/null and b/src/assets/images/pages/carousel/banner-40.jpg differ diff --git a/src/assets/images/pages/carousel/banner-5.jpg b/src/assets/images/pages/carousel/banner-5.jpg new file mode 100644 index 0000000..678c450 Binary files /dev/null and b/src/assets/images/pages/carousel/banner-5.jpg differ diff --git a/src/assets/images/pages/carousel/banner-7.jpg b/src/assets/images/pages/carousel/banner-7.jpg new file mode 100644 index 0000000..4394bad Binary files /dev/null and b/src/assets/images/pages/carousel/banner-7.jpg differ diff --git a/src/assets/images/pages/carousel/banner-8.jpg b/src/assets/images/pages/carousel/banner-8.jpg new file mode 100644 index 0000000..87c47d2 Binary files /dev/null and b/src/assets/images/pages/carousel/banner-8.jpg differ diff --git a/src/assets/images/pages/carousel/banner-9.jpg b/src/assets/images/pages/carousel/banner-9.jpg new file mode 100644 index 0000000..b95fdc5 Binary files /dev/null and b/src/assets/images/pages/carousel/banner-9.jpg differ 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..c7c6221 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..0c8e92b 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..acf3bac 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..2bd848d Binary files /dev/null and b/src/assets/images/pages/content-img-4.jpg differ diff --git a/src/assets/images/pages/eCommerce/Algolia-logo.png b/src/assets/images/pages/eCommerce/Algolia-logo.png new file mode 100644 index 0000000..7873309 Binary files /dev/null and b/src/assets/images/pages/eCommerce/Algolia-logo.png differ diff --git a/src/assets/images/pages/eCommerce/bank.png b/src/assets/images/pages/eCommerce/bank.png new file mode 100644 index 0000000..e8ac725 Binary files /dev/null and b/src/assets/images/pages/eCommerce/bank.png differ diff --git a/src/assets/images/pages/faq.jpg b/src/assets/images/pages/faq.jpg new file mode 100644 index 0000000..fb31ee7 Binary files /dev/null and b/src/assets/images/pages/faq.jpg differ diff --git a/src/assets/images/pages/forgot-password.png b/src/assets/images/pages/forgot-password.png new file mode 100644 index 0000000..e194098 Binary files /dev/null and b/src/assets/images/pages/forgot-password.png differ diff --git a/src/assets/images/pages/graphic-1.png b/src/assets/images/pages/graphic-1.png new file mode 100644 index 0000000..6d5b6d6 Binary files /dev/null and b/src/assets/images/pages/graphic-1.png differ diff --git a/src/assets/images/pages/graphic-2.png b/src/assets/images/pages/graphic-2.png new file mode 100644 index 0000000..54d28cf Binary files /dev/null and b/src/assets/images/pages/graphic-2.png differ diff --git a/src/assets/images/pages/graphic-3.png b/src/assets/images/pages/graphic-3.png new file mode 100644 index 0000000..198cf06 Binary files /dev/null and b/src/assets/images/pages/graphic-3.png differ diff --git a/src/assets/images/pages/graphic-4.png b/src/assets/images/pages/graphic-4.png new file mode 100644 index 0000000..66616f9 Binary files /dev/null and b/src/assets/images/pages/graphic-4.png differ diff --git a/src/assets/images/pages/graphic-5.png b/src/assets/images/pages/graphic-5.png new file mode 100644 index 0000000..9eeb729 Binary files /dev/null and b/src/assets/images/pages/graphic-5.png differ diff --git a/src/assets/images/pages/graphic-6.png b/src/assets/images/pages/graphic-6.png new file mode 100644 index 0000000..6789385 Binary files /dev/null and b/src/assets/images/pages/graphic-6.png differ diff --git a/src/assets/images/pages/kb-article.jpg b/src/assets/images/pages/kb-article.jpg new file mode 100644 index 0000000..0c3be31 Binary files /dev/null and b/src/assets/images/pages/kb-article.jpg differ diff --git a/src/assets/images/pages/knowledge-base-cover.jpg b/src/assets/images/pages/knowledge-base-cover.jpg new file mode 100644 index 0000000..9937b72 Binary files /dev/null and b/src/assets/images/pages/knowledge-base-cover.jpg differ diff --git a/src/assets/images/pages/lock-screen.png b/src/assets/images/pages/lock-screen.png new file mode 100644 index 0000000..4af21a4 Binary files /dev/null and b/src/assets/images/pages/lock-screen.png differ diff --git a/src/assets/images/pages/login.png b/src/assets/images/pages/login.png new file mode 100644 index 0000000..cbd54d6 Binary files /dev/null and b/src/assets/images/pages/login.png differ 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/maintenance-2.png b/src/assets/images/pages/maintenance-2.png new file mode 100644 index 0000000..08b98fd Binary files /dev/null and b/src/assets/images/pages/maintenance-2.png differ diff --git a/src/assets/images/pages/maintenance.png b/src/assets/images/pages/maintenance.png new file mode 100644 index 0000000..53212b1 Binary files /dev/null and b/src/assets/images/pages/maintenance.png differ diff --git a/src/assets/images/pages/modern.jpg b/src/assets/images/pages/modern.jpg new file mode 100644 index 0000000..b3639c2 Binary files /dev/null and b/src/assets/images/pages/modern.jpg differ diff --git a/src/assets/images/pages/not-authorized.png b/src/assets/images/pages/not-authorized.png new file mode 100644 index 0000000..9d2bb8e Binary files /dev/null and b/src/assets/images/pages/not-authorized.png differ diff --git a/src/assets/images/pages/register.jpg b/src/assets/images/pages/register.jpg new file mode 100644 index 0000000..9231d24 Binary files /dev/null and b/src/assets/images/pages/register.jpg differ diff --git a/src/assets/images/pages/reset-password.png b/src/assets/images/pages/reset-password.png new file mode 100644 index 0000000..8a1d81d Binary files /dev/null and b/src/assets/images/pages/reset-password.png differ diff --git a/src/assets/images/pages/rocket.png b/src/assets/images/pages/rocket.png new file mode 100644 index 0000000..743bb79 Binary files /dev/null and b/src/assets/images/pages/rocket.png differ diff --git a/src/assets/images/pages/search-result.jpg b/src/assets/images/pages/search-result.jpg new file mode 100644 index 0000000..bd0d33c Binary files /dev/null and b/src/assets/images/pages/search-result.jpg differ diff --git a/src/assets/images/pages/video-poster.jpg b/src/assets/images/pages/video-poster.jpg new file mode 100644 index 0000000..a7a56b7 Binary files /dev/null and b/src/assets/images/pages/video-poster.jpg differ diff --git a/src/assets/images/pages/vuexy-login-bg.jpg b/src/assets/images/pages/vuexy-login-bg.jpg new file mode 100644 index 0000000..cf3093e Binary files /dev/null and b/src/assets/images/pages/vuexy-login-bg.jpg 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..ef90d09 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..628f500 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..d6124f1 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..37657d1 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..9ba360c 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..a7b911b 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..939d0fd 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..32ff6ba 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..2dcc5cc 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..c7470cb 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..1451afc 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..99d19a8 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..9d0767d 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..0eaa799 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..5b7fc56 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..764b70b 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..ad04a4d 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..f77e4df 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..3b508d4 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..a1a2f95 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..dcb5436 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..fb11dd1 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..f9d249f 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..7641234 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..864213c 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..3caee99 Binary files /dev/null and b/src/assets/images/portrait/small/avatar-s-9.jpg differ diff --git a/src/assets/images/profile/pages/page-01.jpg b/src/assets/images/profile/pages/page-01.jpg new file mode 100644 index 0000000..cffe56c Binary files /dev/null and b/src/assets/images/profile/pages/page-01.jpg differ diff --git a/src/assets/images/profile/pages/page-02.jpg b/src/assets/images/profile/pages/page-02.jpg new file mode 100644 index 0000000..ca91e74 Binary files /dev/null and b/src/assets/images/profile/pages/page-02.jpg differ diff --git a/src/assets/images/profile/pages/page-03.jpg b/src/assets/images/profile/pages/page-03.jpg new file mode 100644 index 0000000..17bc4f7 Binary files /dev/null and b/src/assets/images/profile/pages/page-03.jpg differ diff --git a/src/assets/images/profile/pages/page-04.jpg b/src/assets/images/profile/pages/page-04.jpg new file mode 100644 index 0000000..5d8a4be Binary files /dev/null and b/src/assets/images/profile/pages/page-04.jpg differ diff --git a/src/assets/images/profile/pages/page-05.jpg b/src/assets/images/profile/pages/page-05.jpg new file mode 100644 index 0000000..2bb99d2 Binary files /dev/null and b/src/assets/images/profile/pages/page-05.jpg differ diff --git a/src/assets/images/profile/pages/page-06.jpg b/src/assets/images/profile/pages/page-06.jpg new file mode 100644 index 0000000..5873d59 Binary files /dev/null and b/src/assets/images/profile/pages/page-06.jpg differ diff --git a/src/assets/images/profile/pages/page-07.jpg b/src/assets/images/profile/pages/page-07.jpg new file mode 100644 index 0000000..c43a01b Binary files /dev/null and b/src/assets/images/profile/pages/page-07.jpg differ diff --git a/src/assets/images/profile/pages/page-08.jpg b/src/assets/images/profile/pages/page-08.jpg new file mode 100644 index 0000000..821d3ef Binary files /dev/null and b/src/assets/images/profile/pages/page-08.jpg differ diff --git a/src/assets/images/profile/pages/page-09.jpg b/src/assets/images/profile/pages/page-09.jpg new file mode 100644 index 0000000..c4533b3 Binary files /dev/null and b/src/assets/images/profile/pages/page-09.jpg differ diff --git a/src/assets/images/profile/post-media/2.jpg b/src/assets/images/profile/post-media/2.jpg new file mode 100644 index 0000000..382daa9 Binary files /dev/null and b/src/assets/images/profile/post-media/2.jpg differ diff --git a/src/assets/images/profile/post-media/25.jpg b/src/assets/images/profile/post-media/25.jpg new file mode 100644 index 0000000..d4a349d Binary files /dev/null and b/src/assets/images/profile/post-media/25.jpg differ diff --git a/src/assets/images/profile/user-uploads/cover.jpg b/src/assets/images/profile/user-uploads/cover.jpg new file mode 100644 index 0000000..13a08e1 Binary files /dev/null and b/src/assets/images/profile/user-uploads/cover.jpg differ diff --git a/src/assets/images/profile/user-uploads/user-01.jpg b/src/assets/images/profile/user-uploads/user-01.jpg new file mode 100644 index 0000000..5761cf1 Binary files /dev/null and b/src/assets/images/profile/user-uploads/user-01.jpg differ diff --git a/src/assets/images/profile/user-uploads/user-02.jpg b/src/assets/images/profile/user-uploads/user-02.jpg new file mode 100644 index 0000000..7f38a7e Binary files /dev/null and b/src/assets/images/profile/user-uploads/user-02.jpg differ diff --git a/src/assets/images/profile/user-uploads/user-03.jpg b/src/assets/images/profile/user-uploads/user-03.jpg new file mode 100644 index 0000000..c979804 Binary files /dev/null and b/src/assets/images/profile/user-uploads/user-03.jpg differ diff --git a/src/assets/images/profile/user-uploads/user-04.jpg b/src/assets/images/profile/user-uploads/user-04.jpg new file mode 100644 index 0000000..7b1807b Binary files /dev/null and b/src/assets/images/profile/user-uploads/user-04.jpg differ diff --git a/src/assets/images/profile/user-uploads/user-05.jpg b/src/assets/images/profile/user-uploads/user-05.jpg new file mode 100644 index 0000000..6d7e3ad Binary files /dev/null and b/src/assets/images/profile/user-uploads/user-05.jpg differ diff --git a/src/assets/images/profile/user-uploads/user-06.jpg b/src/assets/images/profile/user-uploads/user-06.jpg new file mode 100644 index 0000000..5ac0e4c Binary files /dev/null and b/src/assets/images/profile/user-uploads/user-06.jpg differ diff --git a/src/assets/images/profile/user-uploads/user-07.jpg b/src/assets/images/profile/user-uploads/user-07.jpg new file mode 100644 index 0000000..e8f31ec Binary files /dev/null and b/src/assets/images/profile/user-uploads/user-07.jpg differ diff --git a/src/assets/images/profile/user-uploads/user-08.jpg b/src/assets/images/profile/user-uploads/user-08.jpg new file mode 100644 index 0000000..7af7c01 Binary files /dev/null and b/src/assets/images/profile/user-uploads/user-08.jpg differ diff --git a/src/assets/images/profile/user-uploads/user-09.jpg b/src/assets/images/profile/user-uploads/user-09.jpg new file mode 100644 index 0000000..05a4db1 Binary files /dev/null and b/src/assets/images/profile/user-uploads/user-09.jpg differ diff --git a/src/assets/images/profile/user-uploads/user-10.jpg b/src/assets/images/profile/user-uploads/user-10.jpg new file mode 100644 index 0000000..baf2dfd Binary files /dev/null and b/src/assets/images/profile/user-uploads/user-10.jpg differ diff --git a/src/assets/images/profile/user-uploads/user-11.jpg b/src/assets/images/profile/user-uploads/user-11.jpg new file mode 100644 index 0000000..282a20a Binary files /dev/null and b/src/assets/images/profile/user-uploads/user-11.jpg differ diff --git a/src/assets/images/profile/user-uploads/user-12.jpg b/src/assets/images/profile/user-uploads/user-12.jpg new file mode 100644 index 0000000..215e21a Binary files /dev/null and b/src/assets/images/profile/user-uploads/user-12.jpg differ diff --git a/src/assets/images/profile/user-uploads/user-13.jpg b/src/assets/images/profile/user-uploads/user-13.jpg new file mode 100644 index 0000000..8355436 Binary files /dev/null and b/src/assets/images/profile/user-uploads/user-13.jpg differ diff --git a/src/assets/images/raty/star-half-2.png b/src/assets/images/raty/star-half-2.png new file mode 100644 index 0000000..3c19e90 Binary files /dev/null and b/src/assets/images/raty/star-half-2.png differ diff --git a/src/assets/images/raty/star-on-2.png b/src/assets/images/raty/star-on-2.png new file mode 100644 index 0000000..975fe7f Binary files /dev/null and b/src/assets/images/raty/star-on-2.png differ diff --git a/src/assets/images/slider/01.jpg b/src/assets/images/slider/01.jpg new file mode 100644 index 0000000..a17dbf6 Binary files /dev/null and b/src/assets/images/slider/01.jpg differ diff --git a/src/assets/images/slider/02.jpg b/src/assets/images/slider/02.jpg new file mode 100644 index 0000000..5a6da6d Binary files /dev/null and b/src/assets/images/slider/02.jpg differ diff --git a/src/assets/images/slider/03.jpg b/src/assets/images/slider/03.jpg new file mode 100644 index 0000000..150b1b6 Binary files /dev/null and b/src/assets/images/slider/03.jpg differ diff --git a/src/assets/images/slider/04.jpg b/src/assets/images/slider/04.jpg new file mode 100644 index 0000000..fdeb4e3 Binary files /dev/null and b/src/assets/images/slider/04.jpg differ diff --git a/src/assets/images/slider/05.jpg b/src/assets/images/slider/05.jpg new file mode 100644 index 0000000..fa80649 Binary files /dev/null and b/src/assets/images/slider/05.jpg differ diff --git a/src/assets/images/slider/06.jpg b/src/assets/images/slider/06.jpg new file mode 100644 index 0000000..3c61572 Binary files /dev/null and b/src/assets/images/slider/06.jpg differ diff --git a/src/assets/scss/ara/ant.css b/src/assets/scss/ara/ant.css new file mode 100644 index 0000000..6030da4 --- /dev/null +++ b/src/assets/scss/ara/ant.css @@ -0,0 +1,393 @@ +:root { + --primary: #1DA57A; + --accent: #35495e; +} +body #app .ant-pagination-item { + margin-right: 0; + margin-left: 8px; +} +body #app .ant-pagination-prev, +body #app .ant-pagination-jump-prev, +body #app .ant-pagination-jump-next { + margin-right: 0; + margin-left: 8px; +} +body #app .ant-pagination-options { + margin-right: 16px; + margin-left: 0; +} +body #app .ant-pagination-prev .ant-pagination-item-link, +body #app .ant-pagination-next .ant-pagination-item-link { + transform: rotate(180deg); +} +body #app .ant-pagination-options-quick-jumper { + margin-right: 8px; +} +body #app .ant-table-thead > tr > th { + text-align: right; +} +body #app .ant-table table { + text-align: right; +} +body #app .ant-modal-header table { + padding-right: 48px; +} +body #app .ant-col-1, +body #app .ant-col-2, +body #app .ant-col-3, +body #app .ant-col-4, +body #app .ant-col-5, +body #app .ant-col-6, +body #app .ant-col-7, +body #app .ant-col-8, +body #app .ant-col-9, +body #app .ant-col-10, +body #app .ant-col-11, +body #app .ant-col-12, +body #app .ant-col-13, +body #app .ant-col-14, +body #app .ant-col-15, +body #app .ant-col-16, +body #app .ant-col-17, +body #app .ant-col-18, +body #app .ant-col-19, +body #app .ant-col-20, +body #app .ant-col-21, +body #app .ant-col-22, +body #app .ant-col-23, +body #app .ant-col-24 { + float: right; +} +@media (max-width: 575px) { + body #app .ant-form-item-label { + text-align: right !important; + } +} +@media screen and (max-width: 576px) { + body #app .antd-pro-pages-forms-step-form-style-information .antd-pro-pages-forms-step-form-style-label { + text-align: right; + } +} +body #app .ant-row { + text-align: right; +} +body #app .antd-pro-components-notice-icon-notice-list-datetime { + direction: rtl; +} +@media (max-width: 480px) { + body #app .ant-steps-horizontal.ant-steps-label-horizontal .ant-steps-item-icon { + float: right; + } + body #app .ant-steps-item.ant-steps-item-wait { + margin-right: 0; + } + body #app .ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item { + margin-right: 0; + } +} +body #app .ant-col-lg-1, +body #app .ant-col-lg-2, +body #app .ant-col-lg-3, +body #app .ant-col-lg-4, +body #app .ant-col-lg-5, +body #app .ant-col-lg-6, +body #app .ant-col-lg-7, +body #app .ant-col-lg-8, +body #app .ant-col-lg-9, +body #app .ant-col-lg-10, +body #app .ant-col-lg-11, +body #app .ant-col-lg-12, +body #app .ant-col-lg-13, +body #app .ant-col-lg-14, +body #app .ant-col-lg-15, +body #app .ant-col-lg-16, +body #app .ant-col-lg-17, +body #app .ant-col-lg-18, +body #app .ant-col-lg-19, +body #app .ant-col-lg-20, +body #app .ant-col-lg-21, +body #app .ant-col-lg-22, +body #app .ant-col-lg-23, +body #app .ant-col-lg-24 { + float: right; +} +body #app .ant-modal-footer button + button { + margin-right: 8px; + margin-left: 0; +} +body #app .ant-select-selection-selected-value { + float: right; +} +body #app .ant-select-dropdown-menu { + padding-right: 0; +} +body #app .ant-calendar-picker-clear, +body #app .ant-calendar-picker-icon { + left: 12px; + right: auto; +} +body #app .ant-calendar-prev-year-btn, +body #app .ant-calendar-prev-month-btn, +body #app .ant-calendar-next-month-btn, +body #app .ant-calendar-next-year-btn { + transform: rotate(180deg); +} +body #app .ant-badge-status-text { + margin-right: 8px; + margin-left: 0; +} +body #app .ant-popover-inner-content { + text-align: right; +} +body #app .ant-btn > .anticon + span, +body #app .ant-btn > span + .anticon { + margin-left: 0; + margin-right: 8px; +} +body #app .ant-dropdown-menu-item, +body #app .ant-dropdown-menu-submenu-title { + text-align: right; +} +body #app .ant-form-item-label label:after { + margin: 0 2px 0 8px; +} +body #app .ant-steps-small .ant-steps-item-title { + padding-left: 12px; + padding-right: 0; +} +body #app .ant-steps-item-title::after { + right: 100%; + left: auto; +} +body #app .ant-steps-small .ant-steps-item-icon { + margin-right: 8px; + margin-left: 8px; +} +body #app .ant-steps-small.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item { + margin-left: 12px; + margin-right: 0; +} +body #app .ant-select-selection__placeholder, +body #app .ant-select-search__field__placeholder { + right: 20px; + left: 0; + text-align: right; +} +@media (min-width: 576px) { + body #app .ant-col-sm-1, + body #app .ant-col-sm-2, + body #app .ant-col-sm-3, + body #app .ant-col-sm-4, + body #app .ant-col-sm-5, + body #app .ant-col-sm-6, + body #app .ant-col-sm-7, + body #app .ant-col-sm-8, + body #app .ant-col-sm-9, + body #app .ant-col-sm-10, + body #app .ant-col-sm-11, + body #app .ant-col-sm-12, + body #app .ant-col-sm-13, + body #app .ant-col-sm-14, + body #app .ant-col-sm-15, + body #app .ant-col-sm-16, + body #app .ant-col-sm-17, + body #app .ant-col-sm-18, + body #app .ant-col-sm-19, + body #app .ant-col-sm-20, + body #app .ant-col-sm-21, + body #app .ant-col-sm-22, + body #app .ant-col-sm-23, + body #app .ant-col-sm-24 { + float: right; + flex: 0 0 auto; + text-align: right; + } +} +body #app .ant-input-number-handler-wrap { + border-radius: 4px 0px 0px 4px; + right: auto; + left: 0; + border-right: 1px solid #d9d9d9; + border-left: none; +} +body #app .ant-input-number-input { + text-align: right; +} +body #app .ant-input-group { + direction: ltr; +} +body #app .ant-form-vertical .ant-form-item-label, +body #app .ant-col-24.ant-form-item-label, +body #app .ant-col-xl-24.ant-form-item-label { + text-align: right; +} +body #app .ant-time-picker-icon, +body #app .ant-time-picker-clear { + left: 11px; + right: auto; +} +body #app .ant-popover-message-title { + padding-left: 0; + padding-right: 22px; +} +body #app .ant-popover-title { + text-align: right; +} +body #app .anticon { + vertical-align: middle; +} +body #app .ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:last-child .ant-steps-item-title { + padding-right: 14px; +} +body #app .antd-pro-components-result-index-result .antd-pro-components-result-index-actions button:not(:last-child) { + margin-right: 0; + margin-left: 8px; +} +body #app .antd-pro-pages-list-basic-list-standardList .antd-pro-pages-list-basic-list-headerInfo > em { + right: auto; + left: 0; +} +body #app .ant-tabs-nav-scroll { + direction: rtl; +} +body #app .ant-badge-status { + vertical-align: middle; +} +body #app .ant-tabs-nav-container, +body #app .antd-pro-components-notice-icon-index-popover .ant-spin-container { + direction: ltr; +} +body #app .ant-tabs-nav-container .ant-tabs-tab, +body #app .antd-pro-components-notice-icon-index-popover .ant-spin-container .ant-tabs-tab { + direction: rtl; +} +body #app .ant-input-search-enter-button + .ant-input-group-addon .ant-input-search-button, +body #app .ant-input-search-enter-button input + .ant-input-group-addon .ant-input-search-button { + width: 100%; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +body #app .ant-tabs-tabpane { + direction: rtl; + text-align: right; +} +body #app .ant-collapse > .ant-collapse-item > .ant-collapse-header .ant-collapse-arrow { + transform: translateY(-50%) scale(-1, 1); +} +body #app .ant-radio-group, +body #app .ant-radio-group-outline, +body #app .ant-btn-group { + direction: ltr; +} +body #app .ant-list-item-content { + text-align: right; +} +body #app .ant-list-item-meta-avatar { + margin-right: 0; + margin-left: 16px; +} +body #app .ant-input-group .ant-input { + text-align: right; +} +body #app .ant-select-selection--multiple .ant-select-selection__choice { + float: right; +} +body #app .ant-list-vertical .ant-list-item-action > li:first-child { + padding-right: 0; +} +body #app .ant-input-search-enter-button input { + border-left-width: 0; + border-right-width: 1px; +} +body #app .ant-list-item-action-split { + right: 0; + left: auto; +} +body #app .ant-tag { + margin-left: 8px; + margin-right: 0; +} +body #app .ant-modal-confirm .ant-modal-confirm-btns button + button { + margin-left: 0; + margin-right: 8px; + margin-bottom: 0; +} +body #app .ant-menu-inline .ant-menu-submenu-title { + padding-right: 20px; + padding-left: 34px; +} +body #app .ant-menu-item .anticon, +body #app .ant-menu-submenu-title .anticon { + margin-right: 0; + margin-left: 10px; +} +body #app .ant-menu-submenu-vertical > .ant-menu-submenu-title .ant-menu-submenu-arrow, +body #app .ant-menu-submenu-vertical-left > .ant-menu-submenu-title .ant-menu-submenu-arrow, +body #app .ant-menu-submenu-vertical-right > .ant-menu-submenu-title .ant-menu-submenu-arrow, +body #app .ant-menu-submenu-inline > .ant-menu-submenu-title .ant-menu-submenu-arrow { + right: auto; + left: 16px; +} +body #app .ant-steps-dot .ant-steps-item-tail { + margin: 0 80px 0 0; + left: auto; + right: 0; +} +body #app .ant-steps-dot .ant-steps-item-icon { + margin-right: 67px; + margin-left: 8px; +} +body #app .ant-tabs-nav { + direction: ltr; +} +body #app .ant-input-search-enter-button .ant-input-group { + direction: rtl; +} +body #app .ant-input-search .ant-input-group-addon .ant-input-search-button { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +body #app .ant-table-filter-dropdown .ant-dropdown-menu-item > label + span { + padding-right: 5px; + padding-left: 0; +} +body #app .ant-input-group:not(.ant-input-wrapper) > .ant-input:first-child, +body #app .ant-input-group-addon:first-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} +body #app .ant-input-group.ant-input-group-compact > *:last-child { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; + border-top-right-radius: 0px; + border-bottom-right-radius: 0px; +} +body #app .ant-upload-list-item-info { + padding-right: 45px; +} +body #app .ant-upload-list-item-info .ant-upload-list-item-name { + font-family: Arial !important; + direction: ltr; +} +body #app .ant-upload-list-item-info .anticon-paper-clip { + right: 25px; +} +body #app .ant-radio-wrapper { + direction: ltr; + margin-right: 0; + margin-left: 8px; +} +.tether-element { + z-index: 10000; +} +.ant-modal-wrap .ant-modal-header { + padding-right: 48px; +} +.ant-select-dropdown { + z-index: 2500000; +} +/*# sourceMappingURL=ant.css.map */ \ No newline at end of file diff --git a/src/assets/scss/ara/ant.css.map b/src/assets/scss/ara/ant.css.map new file mode 100644 index 0000000..a617658 --- /dev/null +++ b/src/assets/scss/ara/ant.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["ant.less"],"names":[],"mappings":"AAIA;EACE,kBAAA;EACA,iBAAA;;AAIF,IAAK,KACH,EAAC,GAAa;EACZ,eAAA;EACA,gBAAA;;AAHJ,IAAK,KAMH,EAAC,GAAa;AANhB,IAAK,KAM6B,EAAC,GAAa;AANhD,IAAK,KAMkE,EAAC,GAAa;EACjF,eAAA;EACA,gBAAA;;AARJ,IAAK,KAWH,EAAC,GAAa;EACZ,kBAAA;EACA,cAAA;;AAbJ,IAAK,KAgBH,EAAC,GAAa,gBACZ,EAAC,GAAa;AAjBlB,IAAK,KAgB6B,EAAC,GAAa,gBAC5C,EAAC,GAAa;EACZ,WAAW,cAAX;;AAlBN,IAAK,KAsBH,EAAC,GAAa;EACZ,iBAAA;;AAvBJ,IAAK,KA2BH,EAAC,GAAa,YAAa,KAAK;EAC9B,iBAAA;;AA5BJ,IAAK,KA+BH,EAAC,GAAa,MAAO;EACnB,iBAAA;;AAhCJ,IAAK,KAmCH,EAAC,GAAa,aAAc;EAC1B,mBAAA;;AApCJ,IAAK,KAuCH,EAAC,GAAa;AAvChB,IAAK,KAuCmB,EAAC,GAAa;AAvCtC,IAAK,KAuCyC,EAAC,GAAa;AAvC5D,IAAK,KAuC+D,EAAC,GAAa;AAvClF,IAAK,KAwCH,EAAC,GAAa;AAxChB,IAAK,KAwCmB,EAAC,GAAa;AAxCtC,IAAK,KAwCyC,EAAC,GAAa;AAxC5D,IAAK,KAwC+D,EAAC,GAAa;AAxClF,IAAK,KAyCH,EAAC,GAAa;AAzChB,IAAK,KAyCmB,EAAC,GAAa;AAzCtC,IAAK,KAyC0C,EAAC,GAAa;AAzC7D,IAAK,KAyCiE,EAAC,GAAa;AAzCpF,IAAK,KA0CH,EAAC,GAAa;AA1ChB,IAAK,KA0CoB,EAAC,GAAa;AA1CvC,IAAK,KA0C2C,EAAC,GAAa;AA1C9D,IAAK,KA0CkE,EAAC,GAAa;AA1CrF,IAAK,KA2CH,EAAC,GAAa;AA3ChB,IAAK,KA2CoB,EAAC,GAAa;AA3CvC,IAAK,KA2C2C,EAAC,GAAa;AA3C9D,IAAK,KA2CkE,EAAC,GAAa;AA3CrF,IAAK,KA4CH,EAAC,GAAa;AA5ChB,IAAK,KA4CoB,EAAC,GAAa;AA5CvC,IAAK,KA4C2C,EAAC,GAAa;AA5C9D,IAAK,KA4CkE,EAAC,GAAa;EACjF,YAAA;;AAGF,QAA0B;EAgX5B,IAhaK,KAiDD;IACE,4BAAA;;;AAIJ,mBAAqC;EA0WvC,IAhaK,KAuDD,kDAAkD;IAChD,iBAAA;;;AAxDN,IAAK,KA4DH;EACE,iBAAA;;AA7DJ,IAAK,KAgEH;EACE,cAAA;;AAGF,QAA0B;EA4V5B,IAhaK,KAqED,sBAAqB,2BAA4B;IAC/C,YAAA;;EA0VN,IAhaK,KAyED,gBAAe;IACb,eAAA;;EAsVN,IAhaK,KA6ED,sBAAqB,IAAI,2BAA4B;IACnD,eAAA;;;AA9EN,IAAK,KAkFH,EAAC,GAAa;AAlFhB,IAAK,KAkFsB,EAAC,GAAa;AAlFzC,IAAK,KAkF+C,EAAC,GAAa;AAlFlE,IAAK,KAkFwE,EAAC,GAAa;AAlF3F,IAAK,KAkFiG,EAAC,GAAa;AAlFpH,IAAK,KAkF0H,EAAC,GAAa;AAlF7I,IAAK,KAkFmJ,EAAC,GAAa;AAlFtK,IAAK,KAkF4K,EAAC,GAAa;AAlF/L,IAAK,KAkFqM,EAAC,GAAa;AAlFxN,IAAK,KAkF8N,EAAC,GAAa;AAlFjP,IAAK,KAkFwP,EAAC,GAAa;AAlF3Q,IAAK,KAkFkR,EAAC,GAAa;AAlFrS,IAAK,KAkF4S,EAAC,GAAa;AAlF/T,IAAK,KAkFsU,EAAC,GAAa;AAlFzV,IAAK,KAkFgW,EAAC,GAAa;AAlFnX,IAAK,KAkF0X,EAAC,GAAa;AAlF7Y,IAAK,KAkFoZ,EAAC,GAAa;AAlFva,IAAK,KAkF8a,EAAC,GAAa;AAlFjc,IAAK,KAkFwc,EAAC,GAAa;AAlF3d,IAAK,KAkFke,EAAC,GAAa;AAlFrf,IAAK,KAkF4f,EAAC,GAAa;AAlF/gB,IAAK,KAkFshB,EAAC,GAAa;AAlFziB,IAAK,KAkFgjB,EAAC,GAAa;AAlFnkB,IAAK,KAkF0kB,EAAC,GAAa;EACzlB,YAAA;;AAnFJ,IAAK,KAsFH,EAAC,GAAa,aAAc,OAAO;EACjC,iBAAA;EACA,cAAA;;AAxFJ,IAAK,KA2FH,EAAC,GAAa;EACZ,YAAA;;AA5FJ,IAAK,KA+FH,EAAC,GAAa;EACZ,gBAAA;;AAhGJ,IAAK,KAmGH,EAAC,GAAa;AAnGhB,IAAK,KAmGmC,EAAC,GAAa;EAClD,UAAA;EACA,WAAA;;AArGJ,IAAK,KAwGH,EAAC,GAAa;AAxGhB,IAAK,KAwGoC,EAAC,GAAa;AAxGvD,IAAK,KAwG4E,EAAC,GAAa;AAxG/F,IAAK,KAwGoH,EAAC,GAAa;EACnI,WAAW,cAAX;;AAzGJ,IAAK,KA4GH,EAAC,GAAa;EACZ,iBAAA;EACA,cAAA;;AA9GJ,IAAK,KAiHH,EAAC,GAAa;EACZ,iBAAA;;AAlHJ,IAAK,KAqHH,EAAC,GAAa,IAAK,IAAG,GAAa,IAAK;AArH1C,IAAK,KAqH6C,EAAC,GAAa,IAAK,OAAO,IAAG,GAAa;EACxF,cAAA;EACA,iBAAA;;AAvHJ,IAAK,KA0HH,EAAC,GAAa;AA1HhB,IAAK,KA0HgC,EAAC,GAAa;EAC/C,iBAAA;;AA3HJ,IAAK,KA8HH,EAAC,GAAa,gBAAiB,MAAK;EAClC,mBAAA;;AA/HJ,IAAK,KAkIH,EAAC,GAAa,YAAa,EAAC,GAAa;EACvC,kBAAA;EACA,gBAAA;;AApIJ,IAAK,KAuIH,EAAC,GAAa,iBAAiB;EAC7B,WAAA;EACA,UAAA;;AAzIJ,IAAK,KA4IH,EAAC,GAAa,YAAa,EAAC,GAAa;EACvC,iBAAA;EACA,gBAAA;;AA9IJ,IAAK,KAiJH,EAAC,GAAa,YAAY,CAAC,GAAa,iBAAiB,IAAI,2BAAsC,EAAC,GAAa;EAC/G,iBAAA;EACA,eAAA;;AAnJJ,IAAK,KAsJH,EAAC,GAAa;AAtJhB,IAAK,KAuJH,EAAC,GAAa;EACZ,WAAA;EACA,OAAA;EACA,iBAAA;;AAGF,QAA0B;EAmQ5B,IAhaK,KA8JD;EAkQJ,IAhaK,KA+JD;EAiQJ,IAhaK,KAgKD;EAgQJ,IAhaK,KAiKD;EA+PJ,IAhaK,KAkKD;EA8PJ,IAhaK,KAmKD;EA6PJ,IAhaK,KAoKD;EA4PJ,IAhaK,KAqKD;EA2PJ,IAhaK,KAsKD;EA0PJ,IAhaK,KAuKD;EAyPJ,IAhaK,KAwKD;EAwPJ,IAhaK,KAyKD;EAuPJ,IAhaK,KA0KD;EAsPJ,IAhaK,KA2KD;EAqPJ,IAhaK,KA4KD;EAoPJ,IAhaK,KA6KD;EAmPJ,IAhaK,KA8KD;EAkPJ,IAhaK,KA+KD;EAiPJ,IAhaK,KAgLD;EAgPJ,IAhaK,KAiLD;EA+OJ,IAhaK,KAkLD;EA8OJ,IAhaK,KAmLD;EA6OJ,IAhaK,KAoLD;EA4OJ,IAhaK,KAqLD;IACE,YAAA;IACA,cAAA;IACA,iBAAA;;;AAxLN,IAAK,KA4LH,EAAC,GAAa;EACZ,8BAAA;EACA,WAAA;EACA,OAAA;EACA,+BAAA;EACA,iBAAA;;AAjMJ,IAAK,KAoMH,EAAC,GAAa;EACZ,iBAAA;;AArMJ,IAAK,KAwMH,EAAC,GAAa;EACZ,cAAA;;AAzMJ,IAAK,KA4MH,EAAC,GAAa,cAAe,EAAC,GAAa;AA5M7C,IAAK,KA4M0D,EAAC,GAAa,OAAO,CAAC,GAAa;AA5MlG,IAAK,KA4M+G,EAAC,GAAa,UAAU,CAAC,GAAa;EACtJ,iBAAA;;AA7MJ,IAAK,KAgNH,EAAC,GAAa;AAhNhB,IAAK,KAgN8B,EAAC,GAAa;EAC7C,UAAA;EACA,WAAA;;AAlNJ,IAAK,KAqNH,EAAC,GAAa;EACZ,eAAA;EACA,mBAAA;;AAvNJ,IAAK,KA0NH,EAAC,GAAa;EACZ,iBAAA;;AA3NJ,IAAK,KA8NH;EACE,sBAAA;;AA/NJ,IAAK,KAkOH,EAAC,GAAa,iBAAiB,IAAI,2BAAsC,EAAC,GAAa,WAAW,WAAY,EAAC,GAAa;EAC1H,mBAAA;;AAnOJ,IAAK,KAsOH,yCAAyC,0CAA0C,OAAM,IAAI;EAC3F,eAAA;EACA,gBAAA;;AAxOJ,IAAK,KA4OH,6CAA6C,2CAA2C;EACtF,WAAA;EACA,OAAA;;AA9OJ,IAAK,KAkPH,EAAC,GAAa;EACZ,cAAA;;AAnPJ,IAAK,KAsPH,EAAC,GAAa;EACZ,sBAAA;;AAvPJ,IAAK,KA0PH,EAAC,GAAa;AA1PhB,IAAK,KA0PgC,+CAA+C,EAAC,GAAa;EAC9F,cAAA;;AAEA,IA7PC,KA0PH,EAAC,GAAa,mBAGV,EAAC,GAAa;AAAhB,IA7PC,KA0PgC,+CAA+C,EAAC,GAAa,eAG5F,EAAC,GAAa;EACd,cAAA;;AA9PN,IAAK,KAkQH,+BAA+B,yBAAyB;AAlQ1D,IAAK,KAkQ+E,+BAA+B,MAAM,yBAAyB;EAC9I,WAAA;EACA,2BAAA;EACA,8BAAA;;AArQJ,IAAK,KAwQH,EAAC,GAAa;EACZ,cAAA;EACA,iBAAA;;AA1QJ,IAAK,KA6QH,EAAC,GAAa,SAAU,IAAG,GAAa,cAAe,IAAG,GAAa,gBAAiB,EAAC,GAAa;EACpG,WAAW,iBAAiB,YAA5B;;AA9QJ,IAAK,KAkRH,EAAC,GAAa;AAlRhB,IAAK,KAkRyB,EAAC,GAAa;AAlR5C,IAAK,KAkR6D,EAAC,GAAa;EAC5E,cAAA;;AAnRJ,IAAK,KAsRH,EAAC,GAAa;EACZ,iBAAA;;AAvRJ,IAAK,KA0RH,EAAC,GAAa;EACZ,eAAA;EACA,iBAAA;;AA5RJ,IAAK,KA+RH,EAAC,GAAa,YAAa,EAAC,GAAa;EACvC,iBAAA;;AAhSJ,IAAK,KAmSH,EAAC,GAAa,2BAA4B,EAAC,GAAa;EACtD,YAAA;;AApSJ,IAAK,KAuSH,EAAC,GAAa,cAAe,EAAC,GAAa,iBAAkB,KAAI;EAC/D,gBAAA;;AAxSJ,IAAK,KA2SH,+BAA+B;EAC7B,oBAAA;EACA,uBAAA;;AA7SJ,IAAK,KAgTH,EAAC,GAAa;EACZ,QAAA;EACA,UAAA;;AAlTJ,IAAK,KAqTH,EAAC,GAAa;EACZ,gBAAA;EACA,eAAA;;AAvTJ,IAAK,KA0TH,EAAC,GAAa,cAAe,EAAC,GAAa,mBAAoB,OAAO;EACpE,cAAA;EACA,iBAAA;EACA,gBAAA;;AA7TJ,IAAK,KAgUH,EAAC,GAAa,YAAa,EAAC,GAAa;EACvC,mBAAA;EACA,kBAAA;;AAlUJ,IAAK,KAqUH,EAAC,GAAa,UAAW,EAAC,GAAa;AArUzC,IAAK,KAqU0C,EAAC,GAAa,mBAAoB,EAAC,GAAa;EAC3F,eAAA;EACA,iBAAA;;AAvUJ,IAAK,KA0UH,EAAC,GAAa,sBAAuB,IAAG,GAAa,mBAAoB,EAAC,GAAa;AA1UzF,IAAK,KA0UyG,EAAC,GAAa,2BAA4B,IAAG,GAAa,mBAAoB,EAAC,GAAa;AA1U1M,IAAK,KA0U0N,EAAC,GAAa,4BAA6B,IAAG,GAAa,mBAAoB,EAAC,GAAa;AA1U5T,IAAK,KA0U4U,EAAC,GAAa,oBAAqB,IAAG,GAAa,mBAAoB,EAAC,GAAa;EACla,WAAA;EACA,UAAA;;AA5UJ,IAAK,KA+UH,EAAC,GAAa,UAAW,EAAC,GAAa;EACrC,kBAAA;EACA,UAAA;EACA,QAAA;;AAlVJ,IAAK,KAqVH,EAAC,GAAa,UAAW,EAAC,GAAa;EACrC,kBAAA;EACA,gBAAA;;AAvVJ,IAAK,KA0VH,EAAC,GAAa;EACZ,cAAA;;AA3VJ,IAAK,KA8VH,EAAC,GAAa,0BAA2B,EAAC,GAAa;EACrD,cAAA;;AA/VJ,IAAK,KAkWH,EAAC,GAAa,aAAc,EAAC,GAAa,kBAAmB,EAAC,GAAa;EACzE,2BAAA;EACA,8BAAA;EACA,0BAAA;EACA,6BAAA;;AAtWJ,IAAK,KAyWH,2BAA2B,wBAAwB,QAAQ;EACzD,kBAAA;EACA,eAAA;;AA3WJ,IAAK,KA8WH,iBAAgB,IAAI,oBAAqB,aAAY;AA9WvD,IAAK,KA8WgE,uBAAsB;EACvF,yBAAA;EACA,4BAAA;EACA,4BAAA;EACA,+BAAA;;AAlXJ,IAAK,KAqXH,iBAAgB,wBAAyB,IAAG;EAC1C,2BAAA;EACA,8BAAA;EACA,4BAAA;EACA,+BAAA;;AAzXJ,IAAK,KA4XH;EACE,mBAAA;;AA7XJ,IAAK,KA4XH,2BAGE;EACE,6BAAA;EACA,cAAA;;AAjYN,IAAK,KA4XH,2BAQE;EACE,WAAA;;AArYN,IAAK,KAyYH;EACE,cAAA;EACA,eAAA;EACA,gBAAA;;AAMJ;EACE,cAAA;;AAGF,CAAC,GAAa,WACZ,EAAC,GAAa;EACZ,mBAAA;;AAIJ;EAEE,gBAAA","file":"ant.css"} \ No newline at end of file diff --git a/src/assets/scss/ara/ant.less b/src/assets/scss/ara/ant.less new file mode 100644 index 0000000..dc1d17e --- /dev/null +++ b/src/assets/scss/ara/ant.less @@ -0,0 +1,426 @@ +@layout-header-height: 61px; +@border-color-base: ~'var(--accent)'; +@ant-prefix: ant; + +:root { + --primary: #1DA57A; + --accent: #35495e; +} + + +body #app { + .@{ant-prefix}-pagination-item { + margin-right: 0; + margin-left: 8px; + } + + .@{ant-prefix}-pagination-prev, .@{ant-prefix}-pagination-jump-prev, .@{ant-prefix}-pagination-jump-next { + margin-right: 0; + margin-left: 8px; + } + + .@{ant-prefix}-pagination-options { + margin-right: 16px; + margin-left: 0; + } + + .@{ant-prefix}-pagination-prev, .@{ant-prefix}-pagination-next { + .@{ant-prefix}-pagination-item-link { + transform: rotate(180deg); + } + } + + .@{ant-prefix}-pagination-options-quick-jumper { + margin-right: 8px; + } + + + .@{ant-prefix}-table-thead > tr > th { + text-align: right; + } + + .@{ant-prefix}-table table { + text-align: right; + } + + .@{ant-prefix}-modal-header table { + padding-right: 48px; + } + + .@{ant-prefix}-col-1, .@{ant-prefix}-col-2, .@{ant-prefix}-col-3, .@{ant-prefix}-col-4, + .@{ant-prefix}-col-5, .@{ant-prefix}-col-6, .@{ant-prefix}-col-7, .@{ant-prefix}-col-8, + .@{ant-prefix}-col-9, .@{ant-prefix}-col-10, .@{ant-prefix}-col-11, .@{ant-prefix}-col-12, + .@{ant-prefix}-col-13, .@{ant-prefix}-col-14, .@{ant-prefix}-col-15, .@{ant-prefix}-col-16, + .@{ant-prefix}-col-17, .@{ant-prefix}-col-18, .@{ant-prefix}-col-19, .@{ant-prefix}-col-20, + .@{ant-prefix}-col-21, .@{ant-prefix}-col-22, .@{ant-prefix}-col-23, .@{ant-prefix}-col-24 { + float: right; + } + + @media (max-width: 575px) { + .ant-form-item-label { + text-align: right !important; + } + } + + @media screen and (max-width: 576px) { + .antd-pro-pages-forms-step-form-style-information .antd-pro-pages-forms-step-form-style-label { + text-align: right; + } + } + + .ant-row { + text-align: right; + } + + .antd-pro-components-notice-icon-notice-list-datetime { + direction: rtl; + } + + @media (max-width: 480px) { + .ant-steps-horizontal.ant-steps-label-horizontal .ant-steps-item-icon { + float: right; + } + + .ant-steps-item.ant-steps-item-wait { + margin-right: 0; + } + + .ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item { + margin-right: 0; + } + } + + .@{ant-prefix}-col-lg-1, .@{ant-prefix}-col-lg-2, .@{ant-prefix}-col-lg-3, .@{ant-prefix}-col-lg-4, .@{ant-prefix}-col-lg-5, .@{ant-prefix}-col-lg-6, .@{ant-prefix}-col-lg-7, .@{ant-prefix}-col-lg-8, .@{ant-prefix}-col-lg-9, .@{ant-prefix}-col-lg-10, .@{ant-prefix}-col-lg-11, .@{ant-prefix}-col-lg-12, .@{ant-prefix}-col-lg-13, .@{ant-prefix}-col-lg-14, .@{ant-prefix}-col-lg-15, .@{ant-prefix}-col-lg-16, .@{ant-prefix}-col-lg-17, .@{ant-prefix}-col-lg-18, .@{ant-prefix}-col-lg-19, .@{ant-prefix}-col-lg-20, .@{ant-prefix}-col-lg-21, .@{ant-prefix}-col-lg-22, .@{ant-prefix}-col-lg-23, .@{ant-prefix}-col-lg-24 { + float: right; + } + + .@{ant-prefix}-modal-footer button + button { + margin-right: 8px; + margin-left: 0; + } + + .@{ant-prefix}-select-selection-selected-value { + float: right; + } + + .@{ant-prefix}-select-dropdown-menu { + padding-right: 0; + } + + .@{ant-prefix}-calendar-picker-clear, .@{ant-prefix}-calendar-picker-icon { + left: 12px; + right: auto; + } + + .@{ant-prefix}-calendar-prev-year-btn, .@{ant-prefix}-calendar-prev-month-btn, .@{ant-prefix}-calendar-next-month-btn, .@{ant-prefix}-calendar-next-year-btn { + transform: rotate(180deg); + } + + .@{ant-prefix}-badge-status-text { + margin-right: 8px; + margin-left: 0; + } + + .@{ant-prefix}-popover-inner-content { + text-align: right; + } + + .@{ant-prefix}-btn > .@{ant-prefix}icon + span, .@{ant-prefix}-btn > span + .@{ant-prefix}icon { + margin-left: 0; + margin-right: 8px; + } + + .@{ant-prefix}-dropdown-menu-item, .@{ant-prefix}-dropdown-menu-submenu-title { + text-align: right; + } + + .@{ant-prefix}-form-item-label label:after { + margin: 0 2px 0 8px; + } + + .@{ant-prefix}-steps-small .@{ant-prefix}-steps-item-title { + padding-left: 12px; + padding-right: 0; + } + + .@{ant-prefix}-steps-item-title::after { + right: 100%; + left: auto; + } + + .@{ant-prefix}-steps-small .@{ant-prefix}-steps-item-icon { + margin-right: 8px; + margin-left: 8px; + } + + .@{ant-prefix}-steps-small.@{ant-prefix}-steps-horizontal:not(.@{ant-prefix}-steps-label-vertical) .@{ant-prefix}-steps-item { + margin-left: 12px; + margin-right: 0; + } + + .@{ant-prefix}-select-selection__placeholder, + .@{ant-prefix}-select-search__field__placeholder { + right: 20px; + left: 0; + text-align: right; + } + + @media (min-width: 576px) { + .ant-col-sm-1, + .ant-col-sm-2, + .ant-col-sm-3, + .ant-col-sm-4, + .ant-col-sm-5, + .ant-col-sm-6, + .ant-col-sm-7, + .ant-col-sm-8, + .ant-col-sm-9, + .ant-col-sm-10, + .ant-col-sm-11, + .ant-col-sm-12, + .ant-col-sm-13, + .ant-col-sm-14, + .ant-col-sm-15, + .ant-col-sm-16, + .ant-col-sm-17, + .ant-col-sm-18, + .ant-col-sm-19, + .ant-col-sm-20, + .ant-col-sm-21, + .ant-col-sm-22, + .ant-col-sm-23, + .ant-col-sm-24 { + float: right; + flex: 0 0 auto; + text-align: right; + } + } + + .@{ant-prefix}-input-number-handler-wrap { + border-radius: 4px 0px 0px 4px; + right: auto; + left: 0; + border-right: 1px solid #d9d9d9; + border-left: none; + } + + .@{ant-prefix}-input-number-input { + text-align: right; + } + + .@{ant-prefix}-input-group { + direction: ltr; + } + + .@{ant-prefix}-form-vertical .@{ant-prefix}-form-item-label, .@{ant-prefix}-col-24.@{ant-prefix}-form-item-label, .@{ant-prefix}-col-xl-24.@{ant-prefix}-form-item-label { + text-align: right; + } + + .@{ant-prefix}-time-picker-icon, .@{ant-prefix}-time-picker-clear { + left: 11px; + right: auto; + } + + .@{ant-prefix}-popover-message-title { + padding-left: 0; + padding-right: 22px; + } + + .@{ant-prefix}-popover-title { + text-align: right; + } + + .anticon { + vertical-align: middle; + } + + .@{ant-prefix}-steps-horizontal:not(.@{ant-prefix}-steps-label-vertical) .@{ant-prefix}-steps-item:last-child .@{ant-prefix}-steps-item-title { + padding-right: 14px; + } + + .antd-pro-components-result-index-result .antd-pro-components-result-index-actions button:not(:last-child) { + margin-right: 0; + margin-left: 8px; + } + + + .antd-pro-pages-list-basic-list-standardList .antd-pro-pages-list-basic-list-headerInfo > em { + right: auto; + left: 0; + } + + + .@{ant-prefix}-tabs-nav-scroll { + direction: rtl; + } + + .@{ant-prefix}-badge-status { + vertical-align: middle + } + + .@{ant-prefix}-tabs-nav-container, .antd-pro-components-notice-icon-index-popover .@{ant-prefix}-spin-container { + direction: ltr; + + & .@{ant-prefix}-tabs-tab { + direction: rtl; + } + } + + .ant-input-search-enter-button + .ant-input-group-addon .ant-input-search-button, .ant-input-search-enter-button input + .ant-input-group-addon .ant-input-search-button { + width: 100%; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; + } + + .@{ant-prefix}-tabs-tabpane { + direction: rtl; + text-align: right; + } + + .@{ant-prefix}-collapse > .@{ant-prefix}-collapse-item > .@{ant-prefix}-collapse-header .@{ant-prefix}-collapse-arrow { + transform: translateY(-50%) scale(-1, 1); + } + + + .@{ant-prefix}-radio-group, .@{ant-prefix}-radio-group-outline, .@{ant-prefix}-btn-group { + direction: ltr; + } + + .@{ant-prefix}-list-item-content { + text-align: right; + } + + .@{ant-prefix}-list-item-meta-avatar { + margin-right: 0; + margin-left: 16px; + } + + .@{ant-prefix}-input-group .@{ant-prefix}-input { + text-align: right; + } + + .@{ant-prefix}-select-selection--multiple .@{ant-prefix}-select-selection__choice { + float: right; + } + + .@{ant-prefix}-list-vertical .@{ant-prefix}-list-item-action > li:first-child { + padding-right: 0; + } + + .ant-input-search-enter-button input { + border-left-width: 0; + border-right-width: 1px; + } + + .@{ant-prefix}-list-item-action-split { + right: 0; + left: auto; + } + + .@{ant-prefix}-tag { + margin-left: 8px; + margin-right: 0; + } + + .@{ant-prefix}-modal-confirm .@{ant-prefix}-modal-confirm-btns button + button { + margin-left: 0; + margin-right: 8px; + margin-bottom: 0; + } + + .@{ant-prefix}-menu-inline .@{ant-prefix}-menu-submenu-title { + padding-right: 20px; + padding-left: 34px; + } + + .@{ant-prefix}-menu-item .@{ant-prefix}icon, .@{ant-prefix}-menu-submenu-title .@{ant-prefix}icon { + margin-right: 0; + margin-left: 10px; + } + + .@{ant-prefix}-menu-submenu-vertical > .@{ant-prefix}-menu-submenu-title .@{ant-prefix}-menu-submenu-arrow, .@{ant-prefix}-menu-submenu-vertical-left > .@{ant-prefix}-menu-submenu-title .@{ant-prefix}-menu-submenu-arrow, .@{ant-prefix}-menu-submenu-vertical-right > .@{ant-prefix}-menu-submenu-title .@{ant-prefix}-menu-submenu-arrow, .@{ant-prefix}-menu-submenu-inline > .@{ant-prefix}-menu-submenu-title .@{ant-prefix}-menu-submenu-arrow { + right: auto; + left: 16px; + } + + .@{ant-prefix}-steps-dot .@{ant-prefix}-steps-item-tail { + margin: 0 80px 0 0; + left: auto; + right: 0; + } + + .@{ant-prefix}-steps-dot .@{ant-prefix}-steps-item-icon { + margin-right: 67px; + margin-left: 8px; + } + + .@{ant-prefix}-tabs-nav { + direction: ltr; + } + + .@{ant-prefix}-input-search-enter-button .@{ant-prefix}-input-group { + direction: rtl; + } + + .@{ant-prefix}-input-search .@{ant-prefix}-input-group-addon .@{ant-prefix}-input-search-button { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + + .ant-table-filter-dropdown .ant-dropdown-menu-item > label + span { + padding-right: 5px; + padding-left: 0; + } + + .ant-input-group:not(.ant-input-wrapper) > .ant-input:first-child, .ant-input-group-addon:first-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + } + + .ant-input-group.ant-input-group-compact > *:last-child { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; + border-top-right-radius: 0px; + border-bottom-right-radius: 0px; + } + + .ant-upload-list-item-info { + padding-right: 45px; + + .ant-upload-list-item-name { + font-family: Arial !important; + direction: ltr; + } + + .anticon-paper-clip { + right: 25px; + } + } + + .ant-radio-wrapper { + direction: ltr; + margin-right: 0; + margin-left: 8px; + } + +} + + +.tether-element { + z-index: 10000; +} + +.@{ant-prefix}-modal-wrap { + .@{ant-prefix}-modal-header { + padding-right: 48px; + } + +} +.ant-select-dropdown{ + + z-index: 2500000; +} diff --git a/src/assets/scss/ara/farsi.scss b/src/assets/scss/ara/farsi.scss new file mode 100644 index 0000000..6e10f1b --- /dev/null +++ b/src/assets/scss/ara/farsi.scss @@ -0,0 +1,50 @@ + +@font-face { + font-family: 'p-yek'; + src: url("../fonts/yekan/medium.woff") format("woff"); + font-weight: normal; + font-style: normal +} + + +@font-face { + font-family: 'p-yek'; + src: url("../fonts/yekan/bold.woff") format("woff"); + font-weight: bold; +} + + +@font-face { + font-family: 'p-yek'; + src: url("../fonts/yekan/heavy.woff") format("woff"); + font-weight: 700; +} + + +@font-face { + font-family: 'p-yek'; + src: url("../fonts/yekan/light.woff") format("woff"); + font-weight: 300; +} + +@font-face { + font-family: 'p-yek'; + src: url("../fonts/yekan/regular.woff") format("woff"); + font-weight: 400; +} + +body, * { + font-family: p-yek ,sans-serif, tahoma; + letter-spacing: 0px !important; + font-size: inherit; + line-height: inherit; + font-weight: inherit; +} + + + +.ara-icon-button{ + width: 35px; + height: 35px; + border-radius: 50%; +} diff --git a/src/assets/scss/ara/rtlFix.scss b/src/assets/scss/ara/rtlFix.scss new file mode 100644 index 0000000..8a3e5b9 --- /dev/null +++ b/src/assets/scss/ara/rtlFix.scss @@ -0,0 +1,15 @@ +[dir=rtl] .ant-dropdown, [dir=rtl] .ant-select-dropdown, [dir=rtl] .ant-popover { + right: auto !important; +} + +.ant-tooltip-arrow { + display: none; +} + +[dir=rtl] .ant-form-item-label { + text-align: right; +} + +[dir=rtl] .ant-checkbox-checked .ant-checkbox-inner::after{ + border-right: 2px solid #fff; +} \ No newline at end of file diff --git a/src/assets/scss/main.scss b/src/assets/scss/main.scss new file mode 100644 index 0000000..d64c300 --- /dev/null +++ b/src/assets/scss/main.scss @@ -0,0 +1,38 @@ +/*========================================================================================= + File Name: main.scss + Description: Main scss file. Imports other scss partials from 'vuexy' folder + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + +@import "vuexy/variables"; + +@import "vuexy/layout"; +@import "vuexy/typography"; +@import "vuexy/misc"; +@import "vuexy/extraComponents"; +@import "vuexy/themes"; +@import "vuexy/transitions"; + +@import "vuexy/customClasses"; + +// Vuesax fixes and enhancments +@import "vuexy/fixesVuesax"; + +// Tailwind Fixes +@import "vuexy/tailwindFix"; + +// rtl +@import "vuexy/rtl"; +@import "ara/farsi"; + + +@import "ara/rtlFix"; + + +.ant-select-dropdown{ + + z-index: 2500000; +} diff --git a/src/assets/scss/vuexy/_customClasses.scss b/src/assets/scss/vuexy/_customClasses.scss new file mode 100644 index 0000000..cd5fe82 --- /dev/null +++ b/src/assets/scss/vuexy/_customClasses.scss @@ -0,0 +1,527 @@ +/*========================================================================================= + File Name: _customClasses.scss + Description: partial- this file containes custom helper classes + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + + +// ====================================================================================== +// BUTTON +// ====================================================================================== + +.btn-group { + button { + padding: 1rem 1.25rem !important; + } + + :not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + + :not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } +} + +.btn-group-vertical { + + display: inline-flex; + flex-direction: column; + align-items: flex-start; + + button { + padding: 1rem 1.25rem !important; + width: 100%; + } + + :not(:first-child) { + border-top-right-radius: 0; + border-top-left-radius: 0; + } + + :not(:last-child) { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + } +} + + +// ====================================================================================== +// BLUR +// ====================================================================================== + +.blur-1 { + filter: blur(1px); +} + +.blur-2 { + filter: blur(2px); +} + +.blur-3 { + filter: blur(3px); +} + + +// ====================================================================================== +// CHIP +// ====================================================================================== + +.con-vs-chip { + &.number { + padding-right: unset; + min-height: 20px; + min-width: 20px; + margin-right: 0; + + .vs-chip--text { + margin-left: unset; + margin-right: unset; + font-weight: 600; + } + } +} + + +// ====================================================================================== +// COLORS +// ====================================================================================== + +// text classes +.text-primary { + color: rgba(var(--vs-primary), 1) !important; +} + + +.text-success { + color: rgba(var(--vs-success), 1) !important; +} + +.text-danger { + color: rgba(var(--vs-danger), 1) !important; +} + +.text-warning { + color: rgba(var(--vs-warning), 1) !important; +} + +.text-dark { + color: rgba(var(--vs-dark), 1) !important; +} + + +// background classes + +.bg-primary { + background-color: rgba(var(--vs-primary), 1) !important; +} + + +.bg-success { + background-color: rgba(var(--vs-success), 1) !important; +} + +.bg-danger { + background-color: rgba(var(--vs-danger), 1) !important; +} + +.bg-warning { + background-color: rgba(var(--vs-warning), 1) !important; +} + +.bg-dark { + background-color: rgba(var(--vs-dark), 1) !important; +} + + +// border classes + +.border-primary { + border-color: rgba(var(--vs-primary), 1) !important; +} + +.border-success { + border-color: rgba(var(--vs-success), 1) !important; +} + +.border-danger { + border-color: rgba(var(--vs-danger), 1) !important; +} + +.border-warning { + border-color: rgba(var(--vs-warning), 1) !important; +} + +.border-dark { + border-color: rgba(var(--vs-dark), 1) !important; +} + + +// hover background classes + +.hover\:bg-primary { + &:hover { + background-color: rgba(var(--vs-primary), 1) !important; + } +} + + +.hover\:bg-success { + &:hover { + background-color: rgba(var(--vs-success), 1) !important; + } +} + +.hover\:bg-danger { + &:hover { + background-color: rgba(var(--vs-danger), 1) !important; + } +} + +.hover\:bg-warning { + &:hover { + background-color: rgba(var(--vs-warning), 1) !important; + } +} + +.hover\:bg-dark { + &:hover { + background-color: rgba(var(--vs-dark), 1) !important; + } +} + + +// hover text colors +.hover\:text-primary { + &:hover { + color: rgba(var(--vs-primary), 1) !important; + } +} + + +.hover\:text-success { + &:hover { + color: rgba(var(--vs-success), 1) !important; + } +} + +.hover\:text-danger { + &:hover { + color: rgba(var(--vs-danger), 1) !important; + } +} + +.hover\:text-warning { + &:hover { + color: rgba(var(--vs-warning), 1) !important; + } +} + +.hover\:text-dark { + &:hover { + color: rgba(var(--vs-dark), 1) !important; + } +} + +// Gradient colors +.bg-primary-gradient { + background: linear-gradient(118deg, rgba(var(--vs-primary), 1), rgba(var(--vs-primary), .7)) !important; +} + +.bg-success-gradient { + background: linear-gradient(118deg, rgba(var(--vs-success), 1), rgba(var(--vs-success), .7)) !important; +} + +.bg-danger-gradient { + background: linear-gradient(118deg, rgba(var(--vs-danger), 1), rgba(var(--vs-danger), .7)) !important; +} + +.bg-warning-gradient { + background: linear-gradient(118deg, rgba(var(--vs-warning), 1), rgba(var(--vs-warning), .7)) !important; +} + +.bg-dark-gradient { + background: linear-gradient(118deg, rgba(var(--vs-dark), 1), rgba(var(--vs-dark), .7)) !important; +} + + +// ====================================================================================== +// DropDown +// ====================================================================================== + +// Remove padding and border from default dropDown - Used in TheNavbar +.dropdown-custom { + .vs-dropdown--custom { + padding: 0 !important; + border: 0; + overflow: hidden; + border-radius: .5rem; + box-shadow: 0 15px 30px 0 rgba(0, 0, 0, .11), 0 5px 15px 0 rgba(0, 0, 0, .08) !important; + // @apply shadow-lg; + } + + .vs-dropdown--menu--after { + background: rgba(var(--vs-primary), 1) !important; + right: 1.6rem !important; + } +} + + +// ====================================================================================== +// Grid +// ====================================================================================== + +.vx-row { + display: flex; + flex-wrap: wrap; + margin: 0 -1rem; + + & > .vx-col { + padding: 0 1rem; + } + + &.match-height>.vx-col { + display: flex; + } + + &.no-gutter { + margin: 0; + + & > .vx-col { + padding: 0; + } + } +} + + +// ====================================================================================== +// Input +// ====================================================================================== + +.vs-input-no-border { + .vs-input--input { + border: none !important; + + &:focus { + border: none !important; + } + } +} + +.vs-input-no-shdow-focus { + .vs-input--input { + &:focus { + box-shadow: none !important; + } + } +} + +.vs-input-shadow-drop { + input { + box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.14); + } +} + + +// ====================================================================================== +// Sidebar +// ====================================================================================== + +.sidebar-spacer { + width: calc(100% - 260px); + margin-left: 260px; +} + +.sidebar-spacer-with-margin { + width: calc(100% - 260px - 2.2rem); + margin-left: calc(260px + 2.2rem); +} + +.sidebar-spacer--wide { + width: calc(100% - 400px); + margin-left: 400px; +} + +.background-absolute { + .vs-sidebar--background { + position: absolute; + } +} + +.vs-content-sidebar.items-no-padding { + .vs-sidebar--items { + padding: 0; + } +} + +// Create full width sidebar +.full-vs-sidebar { + .vs-sidebar { + max-width: calc(100% - 260px); + margin-left: 260px; + } +} + +@media only screen and (max-width: 992px) { + .full-vs-sidebar { + .vs-sidebar { + max-width: 100%; + margin-left: 0; + } + } +} + + +// ====================================================================================== +// Select +// ====================================================================================== + +.vs-select-no-border { + .vs-select--input { + border: none !important; + } +} + + +// ====================================================================================== +// Tabs +// ====================================================================================== + +.tabs-shadow-none { + .vs-tabs--ul { + box-shadow: none; + } +} + +.tab-action-btn-fill-conatiner { + &.con-vs-tabs { + .vs-tabs--content { + padding: 23px 10px !important; + } + } +} + + +// ====================================================================================== +// Theme: Light & Dark +// ====================================================================================== + +.d-theme-dark-bg, +.d-theme-dark-light-bg { + background-color: $white; +} + +.d-theme-dark-border { + border-color: $white; +} + +.d-theme-border-grey-light { + // @apply border-grey-light; + border-color: #dae1e7; +} + +.d-theme-text-inverse { + color: $white; +} + +.theme-dark { + .d-theme-dark-bg { + background-color: $theme-dark-bg; + } + + .d-theme-dark-light-bg { + background-color: $theme-light-dark-bg; + } + + .d-theme-input-dark-bg { + input { + background-color: $theme-dark-bg; + } + } + + .d-theme-heading-color { + color: $headings-color; + } + + .d-theme-text-inverse { + color: $content-color; + } + + .d-theme-border-grey-light, + .d-theme-dark-border { + border-color: $theme-dark-border-color; + } + + // Table Inverted + .vs-con-table{ + &.table-dark-inverted { + .vs-con-tbody { + .vs-table--tbody-table { + tr { + background: $theme-dark-bg !important; + } + } + } + } + } +} + + +// ====================================================================================== +// Typography +// ====================================================================================== + +.truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.text-big { + font-size: 4rem; +} + +.text-color-base { + color: $content-color; +} + + +// ====================================================================================== +// Users List +// ====================================================================================== + +.user-list { + display: flex; + + & .con-vs-avatar { + transition: .3s; + + &:hover { + transform: translateY(-5px) scale(1.07); + box-shadow: 0 14px 24px rgba(62, 57, 107, 0.2); + // transform: translateY(-5px); + z-index: 999; + } + } +} + + +// ====================================================================================== +// Uncategorized +// ====================================================================================== + +.responsive { + width: 100%; + height: auto; +} + +ul.bordered-items { + &>li:not(:last-of-type):not([class*='shadow']) { + border-bottom: 1px solid $grey-light; + } +} diff --git a/src/assets/scss/vuexy/_extraComponents.scss b/src/assets/scss/vuexy/_extraComponents.scss new file mode 100644 index 0000000..eac85be --- /dev/null +++ b/src/assets/scss/vuexy/_extraComponents.scss @@ -0,0 +1,18 @@ +/*========================================================================================= + File Name: _extraComponents.scss + Description: partial - imports extra components styles + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + + +@import "vuexy/extraComponents/awesomeSwiper"; +@import "vuexy/extraComponents/formWizard"; +@import "vuexy/extraComponents/vueSelect"; +@import "vuexy/extraComponents/charts"; +@import "vuexy/extraComponents/contextMenu"; +@import "vuexy/extraComponents/quillEditor"; +@import "vuexy/extraComponents/datePicker"; +@import "vuexy/extraComponents/datetimePicker"; diff --git a/src/assets/scss/vuexy/_fixesVuesax.scss b/src/assets/scss/vuexy/_fixesVuesax.scss new file mode 100644 index 0000000..cf40d95 --- /dev/null +++ b/src/assets/scss/vuexy/_fixesVuesax.scss @@ -0,0 +1,741 @@ +/*========================================================================================= + File Name: _fixesVuesax.scss + Description: Partial - Fixes/Add vuesax framework styles + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + + +// ====================================================================================== +// Alert +// ====================================================================================== + +// Alert shadow and color issue +.con-vs-alert { + box-shadow: none !important; +} + +.vs-alert { + font-size: 1rem; + font-weight: 500; + + code { + background: #b5b5b5; + color: $white; + } +} + +// .vs-alert { +// code.language-markup { +// background: transparent !important; +// color: #636363 !important; +// } +// } + +.vs-alert--title { + color: inherit; +} + + + +// ====================================================================================== +// Avatar +// ====================================================================================== + +.vs-avatar--text.feather { + font-size: 1.3rem; +} + +.vs-avatar--con-img { + img { + height: 100%; + } +} + + +// ====================================================================================== +// Button +// ====================================================================================== + +.vs-button { + + font-family: "Montserrat", Helvetica, Arial, sans-serif; + font-size: 1rem; + + &.vs-button-gradient { + &:hover { + box-shadow: none !important; + } + } + + &:not(.vs-radius):not(.includeIconOnly):not(.small):not(.large) { + padding: .75rem 2rem; + + &.vs-button-border { + padding: .679rem 2rem; + } + + } + + &.small:not(.includeIconOnly) { + padding: 0.5rem 1.5rem; + } + + &.large:not(.includeIconOnly) { + padding: 1rem 2.5rem; + } + + &.large { + font-size: 1.25rem; + + .vs-button--icon { + font-size: 1.25rem; + } + } + + &.round { + border-radius: 1.5rem; + } + + &.includeIcon { + float: none; + } +} + + +// ====================================================================================== +// Breadcrumb +// ====================================================================================== + +.vs-breadcrumb--ol { + a { + + &:focus, + &:hover { + color: $primary; + } + } + + .active { + color: $primary; + } +} + + +// ====================================================================================== +// Check-box +// ====================================================================================== + +.vs-checkbox-small { + .vs-checkbox--input:checked+.vs-checkbox .vs-icon { + margin-top: 6px; + margin-left: -1px; + transform: translateY(-3px); + } +} + +.vs-checkbox--check { + display: flex; + align-items: center; + justify-content: center; +} + + +// ====================================================================================== +// Chip +// ====================================================================================== + +.con-chips { + .con-chips--input { + border: none; + } + + .con-vs-chip { + margin: .75rem; + } + + .con-chips--remove-all { + right: 9px; + > .vs-icon { + font-size: 1.3rem; + } + } +} + +.con-vs-chip { + min-height: 26px; + min-width: 26px; + font-size: .8rem; +} + + +// ====================================================================================== +// Collapse +// ====================================================================================== + +.vs-collapse-item--header { + font-size: 1.2rem; + padding: 1rem; +} + +.con-content--item { + font-size: 1rem; + padding: 1rem; +} + +.vs-collapse.default, +.vs-collapse.shadow, +.vs-collapse.border, +.vs-collapse.margin { + .open-item { + .con-content--item { + opacity: 1; + padding: 1rem; + } + } +} + + +// ====================================================================================== +// Dialog +// ====================================================================================== + +.con-vs-dialog { + z-index: 52005; + + .vs-dialog { + header { + .dialog-title { + padding: 0.8rem; + color: inherit; + } + + span.after { + width: 0 + } + } + + .vs-dialog-text { + padding: 1rem; + font-size: 1rem; + } + + footer { + padding: 1rem; + + .vs-button:last-of-type { + margin-left: .5rem !important; + border-color: rgba(0, 0, 0, 0.2) !important; + } + } + } +} + + +// ====================================================================================== +// DropDown +// ====================================================================================== + +.vs-con-dropdown { + color: inherit; + font-size: 1rem; +} + +// Dropdown Button padding +.dropdown-button-container { + .vs-button { + padding: .72rem 1.5rem !important; + } + + .vs-button-line { + padding: 9px 10px !important; + } +} + +.con-vs-dropdown--menu { + z-index: 42000; +} + + +// ====================================================================================== +// Input +// ====================================================================================== + +.vs-input--placeholder { + top: 0px; +} + +.vs-input--input.hasIcon:not(.icon-after-input) { + &+.vs-input--placeholder { + padding-left: 3rem !important; + } + &:focus+.vs-placeholder-label { + padding-left: .7rem !important; + } +} + +// Search Box Text +// .vs-input--input.large.hasIcon { +// padding: 1rem .8rem 1rem 3rem; +// } + +// INPUT FORM ELEMENT COMPONENT +.vs-con-input { + .vs-inputx { + padding: .7rem; + font-size: 1rem; + border: 1px solid rgba(0, 0, 0, .2); + } + + .vx-inputx:not(.input-rounded-full) { + border-radius: 5px; + } +} + +.vs-input--input { + &.normal { + padding: .7rem !important; + font-size: 1rem !important; + + ~ .vs-input--icon { + &.feather { + top: 9px; + } + } + } + + &.large { + padding: 1rem !important; + font-size: 1.2rem !important; + + &.hasIcon { + padding: 1rem 0.8rem 1rem 3rem !important; + } + + ~.vs-input--icon { + top: 1rem !important; + left: 0.8rem !important; + } + } + + &.small { + padding: .4rem !important; + font-size: .8rem !important; + + ~ .vs-input--icon { + &.feather { + top:7px !important; + } + } + } + + &.hasIcon { + padding: 0.7rem 1rem 0.7rem 3rem !important; + + &.icon-after-input { + padding: 0.7rem 3rem 0.7rem 0.7rem !important; + } + } +} + +.vs-input--placeholder { + &.normal { + padding: .7rem !important; + } + + &.large { + padding: 1rem !important; + } + + &.small { + padding: .2rem .6rem !important; + font-size: .8rem !important; + } +} + +.vs-input--icon { + &.feather { + // top: 10px; + padding: .2rem .5rem 0rem .4rem; + } +} + +// Rounded Input +.vs-input.input-rounded-full { + + // Fixes input element don't get rounded borders + input { + border-radius: 20px; + } + + .vs-input--input.hasIcon { + padding: .8rem 1rem 0.8rem 3rem !important; + } + + .input-span-placeholder { + padding-left: 3rem !important; + padding-top: .7rem !important; + } + + .vs-icon { + margin-top: .1rem !important; + margin-left: 0.6rem !important; + font-size: 1rem !important; + } +} + + +// ====================================================================================== +// List +// ====================================================================================== + +.vs-list--item { + .list-titles { + .vs-list--subtitle { + font-size: .85rem; + } + } + + &:last-child { + border-bottom: none; + } +} + + +// ====================================================================================== +// NavBar +// ====================================================================================== + +.vs-navbar--item { + a { + .vs-navbar & { + color: inherit; + } + + .vs-navbar-color-transparent &:hover { + color: $primary !important; + } + } + + .vs-navbar-gradient & { + &.is-active-item a { + color: #fff !important; + } + } +} + + +// ====================================================================================== +// Notification +// ====================================================================================== + +.vs-notifications { + z-index: 200000 !important; + + h3 { + color: $white; + font-weight: 600; + font-size: $h5-font-size; + } +} + + +// ====================================================================================== +// Pagination +// ====================================================================================== +.vs-pagination--li.is-current { + border-radius: 50%; + + .effect { + border-radius: 50%; + } +} + +.vs-pagination--li { + &:hover { + &:not(.is-current) { + color: var(--vs-color-pagination) !important; + } + } +} + +.vs-pagination--ul { + padding: 0; +} + + +// ====================================================================================== +// PopUp +// ====================================================================================== + +.vs-popup--title, +.vs-notifications { + h3 { + margin-bottom: 0; + } +} + +.con-vs-popup { + z-index: 53000; + + .vs-popup--content { + padding: 1rem; + font-size: 1rem; + } +} + + +// ====================================================================================== +// Radio +// ====================================================================================== + +// Fixes check-box gets in center +.con-vs-checkbox, +.con-vs-radio { + justify-content: flex-start !important; +} + +.vs-radio--label { + line-height: 1; +} + +.con-vs-radio { + display: inline-flex; +} + +// ====================================================================================== +// Select +// ====================================================================================== + +.con-select { + .vs-select--input { + padding: 10px; + font-size: 1rem; + border: 1px solid rgba(0, 0, 0, .2); + } +} + +.vs-select--options { + font-size: 1rem; + border: 1px solid #eee; + z-index: 530001; + + span { + color: $content-color; + font-size: 1rem; + } +} + +.v-select { + .dropdown-toggle { + .vs__actions { + .clear { + padding-top: 4px; + } + } + } +} + + +// ====================================================================================== +// Sidebar +// ====================================================================================== + +.vs-sidebar { + height: calc(var(--vh, 1vh) * 100); + .vs-sidebar--items { + overflow: hidden; + height: 100%; + } +} + + +// ====================================================================================== +// Switch +// ====================================================================================== + +.vs-switch--text { + font-size: 0.7rem; +} + + +// ====================================================================================== +// Table +// ====================================================================================== +.vs-con-table { + background: transparent; + + .vs-table--header { + .vs-table--search { + padding: 1rem 0; + + // align text in search input + .vs-table--search-input { + padding: 10px 28px; + border: 1px solid rgba(0, 0, 0, .1); + font-size: 0.9rem; + } + + .vs-table--search-input:focus+i { + left: 10px; + } + + // align search icon in table + i { + left: 10px; + } + } + + } + + .vs-con-tbody { + background: #f8f8f8; + border: 2px solid #f8f8f8; + width: 100%; + overflow: auto; + + // Justify checkboxe center + .con-vs-checkbox { + justify-content: center !important; + } + + .vs-table--tbody-table { + font-size: 1rem; + + .tr-spacer { + height: 2px; + } + + .tr-table { + .tr-expand { + td { + padding: 0; + } + } + + td { + padding: 1rem; + } + } + + .vs-table--thead { + th { + padding: 10px 15px; + } + + .con-td-check { + background: transparent; + box-shadow: none; + } + } + + .tr-values { + .vs-table--td { + padding: 10px 15px; + } + } + } + } + + .vs-table--pagination { + margin-top: 1rem; + } +} + + +// ====================================================================================== +// Tabs +// ====================================================================================== + +.con-slot-tabs { + width: 100%; +} + +.vs-tabs--li { + white-space: nowrap; + + button { + font-size: 1rem; + font-weight: 500; + } + + .vs-tabs-position-left & { + padding: .35rem 0.3rem; + } +} + +// Remove after merge of: https://github.com/lusaxweb/vuesax/pull/637 +.vs-tabs--li { + button { + font-family: inherit; + color: inherit; + } + + .vs-icon-primary, + .vs-icon-success, + .vs-icon-warning, + .vs-icon-danger, + .vs-icon-dark { + color: inherit; + } +} + +// Remove after merge of: https://github.com/lusaxweb/vuesax/pull/637 +.vs-tabs { + .con-tab { + .vs-button-filled { + &:hover { + color: #fff !important; + } + } + } +} + + +// ====================================================================================== +// Text-area +// ====================================================================================== + +.vs-textarea { + font-size: 1rem; + color: inherit; + font-family: $font-family-sans-serif; + line-height: 1.6; +} + +.vs-con-textarea { + border: 1px solid rgba(0, 0, 0, .2) !important; + + > h4 { + color: inherit; + } +} + + +// ====================================================================================== +// Tool-tip +// ====================================================================================== + +.vs-tooltip { + z-index: 52000; +} + + +// ====================================================================================== +// Upload +// ====================================================================================== + +.con-img-upload { + overflow: hidden; + padding: 0.6rem; + + .img-upload { + margin: 15px; + } +} + +.view-upload { + z-index: 52000; +} diff --git a/src/assets/scss/vuexy/_layout.scss b/src/assets/scss/vuexy/_layout.scss new file mode 100644 index 0000000..394141a --- /dev/null +++ b/src/assets/scss/vuexy/_layout.scss @@ -0,0 +1,15 @@ +/*========================================================================================= + File Name: _layout.scss + Description: partial- main layout styles container - imports layout styles + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + +@import "layout/layoutCommon"; +@import "layout/layoutVertical"; +@import "layout/layoutHorizontal"; + +@import "layout/theNavbar"; +@import "layout/footer"; diff --git a/src/assets/scss/vuexy/_misc.scss b/src/assets/scss/vuexy/_misc.scss new file mode 100644 index 0000000..77e7dd8 --- /dev/null +++ b/src/assets/scss/vuexy/_misc.scss @@ -0,0 +1,114 @@ +/*========================================================================================= + File Name: _misc.scss + Description: partial- misc styles + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + + +code { + font-family: $font-family-sans-serif; + background: #eee; + padding: 0.1rem .3rem; + border-radius: 3px; +} + +ul, +ol { + list-style-type: none; + margin: 0; + padding: 0; +} + +.layout--full-page { + .bg-img { + background-image: url("../images/background.jpg"); + background-position: center; + background-repeat: no-repeat; + background-size: cover; + } + + .full-page-bg-color { + background-color: #eff2f7; + } +} + +.single-counter { + display: inline-block; + position: relative; + width: 105px; + padding: 18px 10px 10px; + + span { + display: block; + text-align: center; + } + + .timer { + font-size: 3rem; + } +} + +.chat-card-log { + height: 240px; +} + + +// ====================================================================================== +// Video.js +// ====================================================================================== +.vjs-poster { + background-size: cover !important; + width: 100% !important; +} + + +// ====================================================================================== +// Spinner +// ====================================================================================== + +// .spinner { +// animation: spin 1.5s linear infinite; +// } + +/*! rtl:begin:ignore */ +@keyframes spin { + from { + transform: rotate(0deg); + } + + to { + transform: rotate(360deg); + } +} +/*! rtl:end:ignore */ + + +// ====================================================================================== +// Feather - Font Icon +// ====================================================================================== + +i.feather { + font-weight: 100; +} + +.feather.feather-menu { + z-index: 9; +} + +// ====================================================================================== +// Perfect Scrollbar +// ====================================================================================== + +.scroll-area { + position: relative; + margin: auto; + width: 100%; + height: 100%; + + &:not(.ps) { + overflow-y: auto; + } +} diff --git a/src/assets/scss/vuexy/_rtl.scss b/src/assets/scss/vuexy/_rtl.scss new file mode 100644 index 0000000..7ef9aa0 --- /dev/null +++ b/src/assets/scss/vuexy/_rtl.scss @@ -0,0 +1,11 @@ +/*========================================================================================= + File Name: _rtl.scss + Description: partial- rtl - imports rtl styles + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + +@import "rtl/rtlFixes"; +@import "rtl/rtlOverrides"; diff --git a/src/assets/scss/vuexy/_tailwindFix.scss b/src/assets/scss/vuexy/_tailwindFix.scss new file mode 100644 index 0000000..6b89d11 --- /dev/null +++ b/src/assets/scss/vuexy/_tailwindFix.scss @@ -0,0 +1,14 @@ +/*========================================================================================= + File Name: _tailwindFixes.scss + Description: partial- Tailwind Fixes + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + + +// button fix +button:focus { + outline: none; +} diff --git a/src/assets/scss/vuexy/_themes.scss b/src/assets/scss/vuexy/_themes.scss new file mode 100644 index 0000000..4ba673a --- /dev/null +++ b/src/assets/scss/vuexy/_themes.scss @@ -0,0 +1,11 @@ +/*========================================================================================= + File Name: _themes.scss + Description: partial- themes - imports theme styles + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + +@import "themes/themeDark"; +@import "themes/themeSemiDark"; diff --git a/src/assets/scss/vuexy/_transitions.scss b/src/assets/scss/vuexy/_transitions.scss new file mode 100644 index 0000000..97f91de --- /dev/null +++ b/src/assets/scss/vuexy/_transitions.scss @@ -0,0 +1,162 @@ +/*========================================================================================= + File Name: _transitions.scss + Description: Transition styles + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + + +// /////////////////////////////////////////////// +// Zoom Fade +// /////////////////////////////////////////////// +.zoom-fade-enter-active, +.zoom-fade-leave-active { + transition: transform .35s, opacity .28s ease-in-out; +} +.zoom-fade-enter { + transform: scale(0.97); + opacity: 0; +} + +.zoom-fade-leave-to { + transform: scale(1.03); + opacity: 0; +} + + +// /////////////////////////////////////////////// +// Fade Regular +// /////////////////////////////////////////////// +.fade-enter-active, +.fade-leave-active { + transition: opacity .28s ease-in-out; +} + +.fade-enter, +.fade-leave-to { + opacity: 0; +} + + +// /////////////////////////////////////////////// +// Page Slide +// /////////////////////////////////////////////// +.slide-fade-enter-active, .slide-fade-leave-active { + transition: opacity .35s, transform .4s; +} +.slide-fade-enter { + opacity: 0; + transform: translateX(-30%); +} + +.slide-fade-leave-to{ + opacity: 0; + transform: translateX(30%); +} + + +// /////////////////////////////////////////////// +// Zoom Out +// /////////////////////////////////////////////// +.zoom-out-enter-active, .zoom-out-leave-active { + transition: opacity .35s ease-in-out, transform .45s ease-out; +} +.zoom-out-enter, .zoom-out-leave-to { + opacity: 0; + transform: scale(0); +} + + +// /////////////////////////////////////////////// +// Fade Bottom +// /////////////////////////////////////////////// + +// Speed: 1x +.fade-bottom-enter-active, .fade-bottom-leave-active { + transition: opacity .3s, transform .35s; +} +.fade-bottom-enter { + opacity: 0; + transform: translateY(-8%); +} + +.fade-bottom-leave-to{ + opacity: 0; + transform: translateY(8%); +} + +// Speed: 2x +.fade-bottom-2x-enter-active, .fade-bottom-2x-leave-active { + transition: opacity .2s, transform .25s; +} +.fade-bottom-2x-enter { + opacity: 0; + transform: translateY(-4%); +} + +.fade-bottom-2x-leave-to{ + opacity: 0; + transform: translateY(4%); +} + + +// /////////////////////////////////////////////// +// Fade Top +// /////////////////////////////////////////////// + +// Speed: 1x +.fade-top-enter-active, .fade-top-leave-active { + transition: opacity .3s, transform .35s; +} +.fade-top-enter { + opacity: 0; + transform: translateY(8%); +} + +.fade-top-leave-to{ + opacity: 0; + transform: translateY(-8%); +} + +// Speed: 2x +.fade-top-2x-enter-active, .fade-top-2x-leave-active { + transition: opacity .2s, transform .25s; +} +.fade-top-2x-enter { + opacity: 0; + transform: translateY(4%); +} + +.fade-top-2x-leave-to{ + opacity: 0; + transform: translateY(-4%); +} + + +/////////////////////////////////////////////////////////// +// transition-group : list; +/////////////////////////////////////////////////////////// +.list-leave-active { + position: absolute; +} + +.list-enter, +.list-leave-to{ + opacity: 0; + transform: translateX(30px); +} + + +/////////////////////////////////////////////////////////// +// transition-group : list-enter-up; +/////////////////////////////////////////////////////////// +.list-enter-up-leave-active { + transition: none !important; +} + +.list-enter-up-enter { + opacity: 0; + transform: translateY(30px); +} diff --git a/src/assets/scss/vuexy/_typography.scss b/src/assets/scss/vuexy/_typography.scss new file mode 100644 index 0000000..1a42059 --- /dev/null +++ b/src/assets/scss/vuexy/_typography.scss @@ -0,0 +1,49 @@ +/*========================================================================================= + File Name: _typography.scss + Description: partial- typography styles + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + + +@import url('https://fonts.googleapis.com/css?family=Montserrat:300,400,500,600,700'); + +body { + color: $content-color; +} + +h1, h2, h3, h4, h5, h6, +.h1, .h2, .h3, .h4, .h5, .h6 { + font-family: $headings-font-family; + font-weight: $headings-font-weight; + line-height: $headings-line-height; + color: $headings-color; +} + +h1, .h1 { font-size: $h1-font-size; } +h2, .h2 { font-size: $h2-font-size; } +h3, .h3 { font-size: $h3-font-size; } +h4, .h4 { font-size: $h4-font-size; } +h5, .h5 { font-size: $h5-font-size; } +h6, .h6 { font-size: $h6-font-size; } + +h4 { + .vs-tooltip &{ + color: $white; + } +} + + +a:active, +a:visited, +a:hover, +a { + color: rgba(var(--vs-primary), 1); +} + +// quill editor +u { + text-decoration: underline; +} diff --git a/src/assets/scss/vuexy/_variables.scss b/src/assets/scss/vuexy/_variables.scss new file mode 100644 index 0000000..0b0f61c --- /dev/null +++ b/src/assets/scss/vuexy/_variables.scss @@ -0,0 +1,103 @@ +/*========================================================================================= + File Name: _variables.scss + Description: partial- SCSS varibales + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + + +/*======================================================== + SPACING +=========================================================*/ + +$spacer: 2.2rem; +$spacer-sm: ($spacer / 2); +$spacer-lg: ($spacer * 2); + + + +/*======================================================== + COLORS +=========================================================*/ + +$primary: #7367F0; +$success: #28C76F; +$danger: #EA5455; +$warning: #FF9F43; +$dark: #1E1E1E; +$grey: #b8c2cc; +$grey-light: #dae1e7; +$white: #fff; +$black: #22292f; + + +/*======================================================== + TYPOGRAPHY +=========================================================*/ + +$font-family-sans-serif: "Montserrat", Helvetica, Arial, sans-serif !default; +$font-family-serif: Georgia, "Times New Roman", Times, serif !default; + +//** Default monospace fonts for ``, ``, and `
`.
+$font-family-monospace:   Menlo, Monaco, Consolas, "Courier New", monospace !default;
+$font-family-base:        $font-family-sans-serif !default;
+
+$font-size-base:          14px !default;
+$font-size-large:         ceil(($font-size-base * 1.25)) !default;
+$font-size-small:         ceil(($font-size-base * 0.85)) !default;
+
+$h1-font-size:                $font-size-base * 2;
+$h2-font-size:                $font-size-base * 1.74;
+$h3-font-size:                $font-size-base * 1.51;
+$h4-font-size:                $font-size-base * 1.32;
+$h5-font-size:                $font-size-base * 1.14;
+$h6-font-size:                $font-size-base;
+
+
+$line-height-base:        1.625rem !default;
+
+$headings-font-family:    inherit !default;
+$headings-font-weight:    500 !default;
+$headings-line-height:    1.2 !default;
+$headings-color:          #2c2c2c;
+$headings-margin-bottom:      ($spacer / 2) !default;
+
+$font-weight-light:           300;
+$font-weight-normal:          400;
+$font-weight-bold:            700;
+
+$font-weight-base:            $font-weight-normal;
+$line-height-base:            1.45;
+
+$content-color: #626262;
+$theme-background: #f8f8f8;
+
+
+/*========================================================
+        TYPOGRAPHY
+=========================================================*/
+
+$reduced-sidebar-width: 80px;
+
+
+/*========================================================
+        DARK THEME
+=========================================================*/
+
+$sidebar-dark-bg: #10163a;
+$content-dark-bg: #262c49;
+$dark-card-color: #10163a;
+$table-dark-stripe: #212744;
+$table-light-stripe: #262c49;
+$grid-dark-color: #343661;
+
+$theme-light-dark-bg: #262c49;
+$theme-dark-bg: #10163a;
+$theme-dark-secondary-bg: #171e49;
+$theme-dark-text-color: #c2c6dc;
+$theme-dark-heading-color: #ebeefd;
+// $theme-dark-heading-color: #C9CAD2;
+$theme-dark-border-color: #414561;
+$theme-dark-shadow-color: #0C112E;
diff --git a/src/assets/scss/vuexy/apps/chat.scss b/src/assets/scss/vuexy/apps/chat.scss
new file mode 100644
index 0000000..05dd5dc
--- /dev/null
+++ b/src/assets/scss/vuexy/apps/chat.scss
@@ -0,0 +1,99 @@
+/*=========================================================================================
+    File Name: chat.scss
+    Description: Chat app's styles. This is imported in Chat.vue file
+    ----------------------------------------------------------------------------------------
+    Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
+      Author: Pixinvent
+    Author URL: http://www.themeforest.net/user/pixinvent
+==========================================================================================*/
+
+
+#chat-app {
+    .vs-sidebar--background {
+        position: absolute;
+        z-index: 40000;
+    }
+
+    #chat-list-sidebar,
+    #chat-profile-sidebar{
+        .vs-sidebar{
+            max-width: 400px;
+        }
+    }
+
+    #chat-list-sidebar {
+
+        .chat-scroll-area {
+            position: relative;
+            margin: auto;
+            width: 100%;
+            height: calc(100% - 70px);
+
+            &:not(.ps) {
+              overflow-y: auto;
+            }
+
+            .chat__contact {
+                transition: background-color .1s;
+                &:hover{
+                    background-color: #eee;
+                }
+            }
+        }
+    }
+
+
+    .chat__bg{
+        background-color: #DFDBE5;
+        background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='260' height='260' viewBox='0 0 260 260'%3E%3Cg fill-rule='evenodd'%3E%3Cg fill='%239C92AC' fill-opacity='0.4'%3E%3Cpath d='M24.37 16c.2.65.39 1.32.54 2H21.17l1.17 2.34.45.9-.24.11V28a5 5 0 0 1-2.23 8.94l-.02.06a8 8 0 0 1-7.75 6h-20a8 8 0 0 1-7.74-6l-.02-.06A5 5 0 0 1-17.45 28v-6.76l-.79-1.58-.44-.9.9-.44.63-.32H-20a23.01 23.01 0 0 1 44.37-2zm-36.82 2a1 1 0 0 0-.44.1l-3.1 1.56.89 1.79 1.31-.66a3 3 0 0 1 2.69 0l2.2 1.1a1 1 0 0 0 .9 0l2.21-1.1a3 3 0 0 1 2.69 0l2.2 1.1a1 1 0 0 0 .9 0l2.21-1.1a3 3 0 0 1 2.69 0l2.2 1.1a1 1 0 0 0 .86.02l2.88-1.27a3 3 0 0 1 2.43 0l2.88 1.27a1 1 0 0 0 .85-.02l3.1-1.55-.89-1.79-1.42.71a3 3 0 0 1-2.56.06l-2.77-1.23a1 1 0 0 0-.4-.09h-.01a1 1 0 0 0-.4.09l-2.78 1.23a3 3 0 0 1-2.56-.06l-2.3-1.15a1 1 0 0 0-.45-.11h-.01a1 1 0 0 0-.44.1L.9 19.22a3 3 0 0 1-2.69 0l-2.2-1.1a1 1 0 0 0-.45-.11h-.01a1 1 0 0 0-.44.1l-2.21 1.11a3 3 0 0 1-2.69 0l-2.2-1.1a1 1 0 0 0-.45-.11h-.01zm0-2h-4.9a21.01 21.01 0 0 1 39.61 0h-2.09l-.06-.13-.26.13h-32.31zm30.35 7.68l1.36-.68h1.3v2h-36v-1.15l.34-.17 1.36-.68h2.59l1.36.68a3 3 0 0 0 2.69 0l1.36-.68h2.59l1.36.68a3 3 0 0 0 2.69 0L2.26 23h2.59l1.36.68a3 3 0 0 0 2.56.06l1.67-.74h3.23l1.67.74a3 3 0 0 0 2.56-.06zM-13.82 27l16.37 4.91L18.93 27h-32.75zm-.63 2h.34l16.66 5 16.67-5h.33a3 3 0 1 1 0 6h-34a3 3 0 1 1 0-6zm1.35 8a6 6 0 0 0 5.65 4h20a6 6 0 0 0 5.66-4H-13.1z'/%3E%3Cpath id='path6_fill-copy' d='M284.37 16c.2.65.39 1.32.54 2H281.17l1.17 2.34.45.9-.24.11V28a5 5 0 0 1-2.23 8.94l-.02.06a8 8 0 0 1-7.75 6h-20a8 8 0 0 1-7.74-6l-.02-.06a5 5 0 0 1-2.24-8.94v-6.76l-.79-1.58-.44-.9.9-.44.63-.32H240a23.01 23.01 0 0 1 44.37-2zm-36.82 2a1 1 0 0 0-.44.1l-3.1 1.56.89 1.79 1.31-.66a3 3 0 0 1 2.69 0l2.2 1.1a1 1 0 0 0 .9 0l2.21-1.1a3 3 0 0 1 2.69 0l2.2 1.1a1 1 0 0 0 .9 0l2.21-1.1a3 3 0 0 1 2.69 0l2.2 1.1a1 1 0 0 0 .86.02l2.88-1.27a3 3 0 0 1 2.43 0l2.88 1.27a1 1 0 0 0 .85-.02l3.1-1.55-.89-1.79-1.42.71a3 3 0 0 1-2.56.06l-2.77-1.23a1 1 0 0 0-.4-.09h-.01a1 1 0 0 0-.4.09l-2.78 1.23a3 3 0 0 1-2.56-.06l-2.3-1.15a1 1 0 0 0-.45-.11h-.01a1 1 0 0 0-.44.1l-2.21 1.11a3 3 0 0 1-2.69 0l-2.2-1.1a1 1 0 0 0-.45-.11h-.01a1 1 0 0 0-.44.1l-2.21 1.11a3 3 0 0 1-2.69 0l-2.2-1.1a1 1 0 0 0-.45-.11h-.01zm0-2h-4.9a21.01 21.01 0 0 1 39.61 0h-2.09l-.06-.13-.26.13h-32.31zm30.35 7.68l1.36-.68h1.3v2h-36v-1.15l.34-.17 1.36-.68h2.59l1.36.68a3 3 0 0 0 2.69 0l1.36-.68h2.59l1.36.68a3 3 0 0 0 2.69 0l1.36-.68h2.59l1.36.68a3 3 0 0 0 2.56.06l1.67-.74h3.23l1.67.74a3 3 0 0 0 2.56-.06zM246.18 27l16.37 4.91L278.93 27h-32.75zm-.63 2h.34l16.66 5 16.67-5h.33a3 3 0 1 1 0 6h-34a3 3 0 1 1 0-6zm1.35 8a6 6 0 0 0 5.65 4h20a6 6 0 0 0 5.66-4H246.9z'/%3E%3Cpath d='M159.5 21.02A9 9 0 0 0 151 15h-42a9 9 0 0 0-8.5 6.02 6 6 0 0 0 .02 11.96A8.99 8.99 0 0 0 109 45h42a9 9 0 0 0 8.48-12.02 6 6 0 0 0 .02-11.96zM151 17h-42a7 7 0 0 0-6.33 4h54.66a7 7 0 0 0-6.33-4zm-9.34 26a8.98 8.98 0 0 0 3.34-7h-2a7 7 0 0 1-7 7h-4.34a8.98 8.98 0 0 0 3.34-7h-2a7 7 0 0 1-7 7h-4.34a8.98 8.98 0 0 0 3.34-7h-2a7 7 0 0 1-7 7h-7a7 7 0 1 1 0-14h42a7 7 0 1 1 0 14h-9.34zM109 27a9 9 0 0 0-7.48 4H101a4 4 0 1 1 0-8h58a4 4 0 0 1 0 8h-.52a9 9 0 0 0-7.48-4h-42z'/%3E%3Cpath d='M39 115a8 8 0 1 0 0-16 8 8 0 0 0 0 16zm6-8a6 6 0 1 1-12 0 6 6 0 0 1 12 0zm-3-29v-2h8v-6H40a4 4 0 0 0-4 4v10H22l-1.33 4-.67 2h2.19L26 130h26l3.81-40H58l-.67-2L56 84H42v-6zm-4-4v10h2V74h8v-2h-8a2 2 0 0 0-2 2zm2 12h14.56l.67 2H22.77l.67-2H40zm13.8 4H24.2l3.62 38h22.36l3.62-38z'/%3E%3Cpath d='M129 92h-6v4h-6v4h-6v14h-3l.24 2 3.76 32h36l3.76-32 .24-2h-3v-14h-6v-4h-6v-4h-8zm18 22v-12h-4v4h3v8h1zm-3 0v-6h-4v6h4zm-6 6v-16h-4v19.17c1.6-.7 2.97-1.8 4-3.17zm-6 3.8V100h-4v23.8a10.04 10.04 0 0 0 4 0zm-6-.63V104h-4v16a10.04 10.04 0 0 0 4 3.17zm-6-9.17v-6h-4v6h4zm-6 0v-8h3v-4h-4v12h1zm27-12v-4h-4v4h3v4h1v-4zm-6 0v-8h-4v4h3v4h1zm-6-4v-4h-4v8h1v-4h3zm-6 4v-4h-4v8h1v-4h3zm7 24a12 12 0 0 0 11.83-10h7.92l-3.53 30h-32.44l-3.53-30h7.92A12 12 0 0 0 130 126z'/%3E%3Cpath d='M212 86v2h-4v-2h4zm4 0h-2v2h2v-2zm-20 0v.1a5 5 0 0 0-.56 9.65l.06.25 1.12 4.48a2 2 0 0 0 1.94 1.52h.01l7.02 24.55a2 2 0 0 0 1.92 1.45h4.98a2 2 0 0 0 1.92-1.45l7.02-24.55a2 2 0 0 0 1.95-1.52L224.5 96l.06-.25a5 5 0 0 0-.56-9.65V86a14 14 0 0 0-28 0zm4 0h6v2h-9a3 3 0 1 0 0 6H223a3 3 0 1 0 0-6H220v-2h2a12 12 0 1 0-24 0h2zm-1.44 14l-1-4h24.88l-1 4h-22.88zm8.95 26l-6.86-24h18.7l-6.86 24h-4.98zM150 242a22 22 0 1 0 0-44 22 22 0 0 0 0 44zm24-22a24 24 0 1 1-48 0 24 24 0 0 1 48 0zm-28.38 17.73l2.04-.87a6 6 0 0 1 4.68 0l2.04.87a2 2 0 0 0 2.5-.82l1.14-1.9a6 6 0 0 1 3.79-2.75l2.15-.5a2 2 0 0 0 1.54-2.12l-.19-2.2a6 6 0 0 1 1.45-4.46l1.45-1.67a2 2 0 0 0 0-2.62l-1.45-1.67a6 6 0 0 1-1.45-4.46l.2-2.2a2 2 0 0 0-1.55-2.13l-2.15-.5a6 6 0 0 1-3.8-2.75l-1.13-1.9a2 2 0 0 0-2.5-.8l-2.04.86a6 6 0 0 1-4.68 0l-2.04-.87a2 2 0 0 0-2.5.82l-1.14 1.9a6 6 0 0 1-3.79 2.75l-2.15.5a2 2 0 0 0-1.54 2.12l.19 2.2a6 6 0 0 1-1.45 4.46l-1.45 1.67a2 2 0 0 0 0 2.62l1.45 1.67a6 6 0 0 1 1.45 4.46l-.2 2.2a2 2 0 0 0 1.55 2.13l2.15.5a6 6 0 0 1 3.8 2.75l1.13 1.9a2 2 0 0 0 2.5.8zm2.82.97a4 4 0 0 1 3.12 0l2.04.87a4 4 0 0 0 4.99-1.62l1.14-1.9a4 4 0 0 1 2.53-1.84l2.15-.5a4 4 0 0 0 3.09-4.24l-.2-2.2a4 4 0 0 1 .97-2.98l1.45-1.67a4 4 0 0 0 0-5.24l-1.45-1.67a4 4 0 0 1-.97-2.97l.2-2.2a4 4 0 0 0-3.09-4.25l-2.15-.5a4 4 0 0 1-2.53-1.84l-1.14-1.9a4 4 0 0 0-5-1.62l-2.03.87a4 4 0 0 1-3.12 0l-2.04-.87a4 4 0 0 0-4.99 1.62l-1.14 1.9a4 4 0 0 1-2.53 1.84l-2.15.5a4 4 0 0 0-3.09 4.24l.2 2.2a4 4 0 0 1-.97 2.98l-1.45 1.67a4 4 0 0 0 0 5.24l1.45 1.67a4 4 0 0 1 .97 2.97l-.2 2.2a4 4 0 0 0 3.09 4.25l2.15.5a4 4 0 0 1 2.53 1.84l1.14 1.9a4 4 0 0 0 5 1.62l2.03-.87zM152 207a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm6 2a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm-11 1a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm-6 0a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm3-5a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm-8 8a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm3 6a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm0 6a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm4 7a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm5-2a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm5 4a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm4-6a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm6-4a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm-4-3a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm4-3a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm-5-4a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm-24 6a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm16 5a5 5 0 1 0 0-10 5 5 0 0 0 0 10zm7-5a7 7 0 1 1-14 0 7 7 0 0 1 14 0zm86-29a1 1 0 0 0 0 2h2a1 1 0 0 0 0-2h-2zm19 9a1 1 0 0 1 1-1h2a1 1 0 0 1 0 2h-2a1 1 0 0 1-1-1zm-14 5a1 1 0 0 0 0 2h2a1 1 0 0 0 0-2h-2zm-25 1a1 1 0 0 0 0 2h2a1 1 0 0 0 0-2h-2zm5 4a1 1 0 0 0 0 2h2a1 1 0 0 0 0-2h-2zm9 0a1 1 0 0 1 1-1h2a1 1 0 0 1 0 2h-2a1 1 0 0 1-1-1zm15 1a1 1 0 0 1 1-1h2a1 1 0 0 1 0 2h-2a1 1 0 0 1-1-1zm12-2a1 1 0 0 0 0 2h2a1 1 0 0 0 0-2h-2zm-11-14a1 1 0 0 1 1-1h2a1 1 0 0 1 0 2h-2a1 1 0 0 1-1-1zm-19 0a1 1 0 0 0 0 2h2a1 1 0 0 0 0-2h-2zm6 5a1 1 0 0 1 1-1h2a1 1 0 0 1 0 2h-2a1 1 0 0 1-1-1zm-25 15c0-.47.01-.94.03-1.4a5 5 0 0 1-1.7-8 3.99 3.99 0 0 1 1.88-5.18 5 5 0 0 1 3.4-6.22 3 3 0 0 1 1.46-1.05 5 5 0 0 1 7.76-3.27A30.86 30.86 0 0 1 246 184c6.79 0 13.06 2.18 18.17 5.88a5 5 0 0 1 7.76 3.27 3 3 0 0 1 1.47 1.05 5 5 0 0 1 3.4 6.22 4 4 0 0 1 1.87 5.18 4.98 4.98 0 0 1-1.7 8c.02.46.03.93.03 1.4v1h-62v-1zm.83-7.17a30.9 30.9 0 0 0-.62 3.57 3 3 0 0 1-.61-4.2c.37.28.78.49 1.23.63zm1.49-4.61c-.36.87-.68 1.76-.96 2.68a2 2 0 0 1-.21-3.71c.33.4.73.75 1.17 1.03zm2.32-4.54c-.54.86-1.03 1.76-1.49 2.68a3 3 0 0 1-.07-4.67 3 3 0 0 0 1.56 1.99zm1.14-1.7c.35-.5.72-.98 1.1-1.46a1 1 0 1 0-1.1 1.45zm5.34-5.77c-1.03.86-2 1.79-2.9 2.77a3 3 0 0 0-1.11-.77 3 3 0 0 1 4-2zm42.66 2.77c-.9-.98-1.87-1.9-2.9-2.77a3 3 0 0 1 4.01 2 3 3 0 0 0-1.1.77zm1.34 1.54c.38.48.75.96 1.1 1.45a1 1 0 1 0-1.1-1.45zm3.73 5.84c-.46-.92-.95-1.82-1.5-2.68a3 3 0 0 0 1.57-1.99 3 3 0 0 1-.07 4.67zm1.8 4.53c-.29-.9-.6-1.8-.97-2.67.44-.28.84-.63 1.17-1.03a2 2 0 0 1-.2 3.7zm1.14 5.51c-.14-1.21-.35-2.4-.62-3.57.45-.14.86-.35 1.23-.63a2.99 2.99 0 0 1-.6 4.2zM275 214a29 29 0 0 0-57.97 0h57.96zM72.33 198.12c-.21-.32-.34-.7-.34-1.12v-12h-2v12a4.01 4.01 0 0 0 7.09 2.54c.57-.69.91-1.57.91-2.54v-12h-2v12a1.99 1.99 0 0 1-2 2 2 2 0 0 1-1.66-.88zM75 176c.38 0 .74-.04 1.1-.12a4 4 0 0 0 6.19 2.4A13.94 13.94 0 0 1 84 185v24a6 6 0 0 1-6 6h-3v9a5 5 0 1 1-10 0v-9h-3a6 6 0 0 1-6-6v-24a14 14 0 0 1 14-14 5 5 0 0 0 5 5zm-17 15v12a1.99 1.99 0 0 0 1.22 1.84 2 2 0 0 0 2.44-.72c.21-.32.34-.7.34-1.12v-12h2v12a3.98 3.98 0 0 1-5.35 3.77 3.98 3.98 0 0 1-.65-.3V209a4 4 0 0 0 4 4h16a4 4 0 0 0 4-4v-24c.01-1.53-.23-2.88-.72-4.17-.43.1-.87.16-1.28.17a6 6 0 0 1-5.2-3 7 7 0 0 1-6.47-4.88A12 12 0 0 0 58 185v6zm9 24v9a3 3 0 1 0 6 0v-9h-6z'/%3E%3Cpath d='M-17 191a1 1 0 0 0 0 2h2a1 1 0 0 0 0-2h-2zm19 9a1 1 0 0 1 1-1h2a1 1 0 0 1 0 2H3a1 1 0 0 1-1-1zm-14 5a1 1 0 0 0 0 2h2a1 1 0 0 0 0-2h-2zm-25 1a1 1 0 0 0 0 2h2a1 1 0 0 0 0-2h-2zm5 4a1 1 0 0 0 0 2h2a1 1 0 0 0 0-2h-2zm9 0a1 1 0 0 1 1-1h2a1 1 0 0 1 0 2h-2a1 1 0 0 1-1-1zm15 1a1 1 0 0 1 1-1h2a1 1 0 0 1 0 2h-2a1 1 0 0 1-1-1zm12-2a1 1 0 0 0 0 2h2a1 1 0 0 0 0-2H4zm-11-14a1 1 0 0 1 1-1h2a1 1 0 0 1 0 2h-2a1 1 0 0 1-1-1zm-19 0a1 1 0 0 0 0 2h2a1 1 0 0 0 0-2h-2zm6 5a1 1 0 0 1 1-1h2a1 1 0 0 1 0 2h-2a1 1 0 0 1-1-1zm-25 15c0-.47.01-.94.03-1.4a5 5 0 0 1-1.7-8 3.99 3.99 0 0 1 1.88-5.18 5 5 0 0 1 3.4-6.22 3 3 0 0 1 1.46-1.05 5 5 0 0 1 7.76-3.27A30.86 30.86 0 0 1-14 184c6.79 0 13.06 2.18 18.17 5.88a5 5 0 0 1 7.76 3.27 3 3 0 0 1 1.47 1.05 5 5 0 0 1 3.4 6.22 4 4 0 0 1 1.87 5.18 4.98 4.98 0 0 1-1.7 8c.02.46.03.93.03 1.4v1h-62v-1zm.83-7.17a30.9 30.9 0 0 0-.62 3.57 3 3 0 0 1-.61-4.2c.37.28.78.49 1.23.63zm1.49-4.61c-.36.87-.68 1.76-.96 2.68a2 2 0 0 1-.21-3.71c.33.4.73.75 1.17 1.03zm2.32-4.54c-.54.86-1.03 1.76-1.49 2.68a3 3 0 0 1-.07-4.67 3 3 0 0 0 1.56 1.99zm1.14-1.7c.35-.5.72-.98 1.1-1.46a1 1 0 1 0-1.1 1.45zm5.34-5.77c-1.03.86-2 1.79-2.9 2.77a3 3 0 0 0-1.11-.77 3 3 0 0 1 4-2zm42.66 2.77c-.9-.98-1.87-1.9-2.9-2.77a3 3 0 0 1 4.01 2 3 3 0 0 0-1.1.77zm1.34 1.54c.38.48.75.96 1.1 1.45a1 1 0 1 0-1.1-1.45zm3.73 5.84c-.46-.92-.95-1.82-1.5-2.68a3 3 0 0 0 1.57-1.99 3 3 0 0 1-.07 4.67zm1.8 4.53c-.29-.9-.6-1.8-.97-2.67.44-.28.84-.63 1.17-1.03a2 2 0 0 1-.2 3.7zm1.14 5.51c-.14-1.21-.35-2.4-.62-3.57.45-.14.86-.35 1.23-.63a2.99 2.99 0 0 1-.6 4.2zM15 214a29 29 0 0 0-57.97 0h57.96z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
+        // background-image: url('../../../assets/images/backgrounds/chat-bg.png');
+    }
+
+    .chat__log {
+      .msg-time {
+        .vs-divider--text {
+          border-radius: .3rem;
+          box-shadow: 0 2px 4px 0 rgba(0,0,0,0.10);
+          background: #fff !important;
+          border: 1px solid transparent;
+        }
+      }
+    }
+
+    .chat-content-area {
+        position: relative;
+
+
+        .chat-content-scroll-area {
+            position: relative;
+            margin: auto;
+            width: 100%;
+            height: calc(100% - 134px);
+
+            &:not(.ps) {
+              overflow-y: auto;
+            }
+
+            .chat__input {
+                position: absolute;
+                bottom: 0;
+                width: 100%;
+            }
+        }
+    }
+
+    // MEDIA QUIRIES
+    @screen sm {
+        .user-profile-container .vs-sidebar {
+            // @apply w-full
+            width: 100%;
+        }
+    }
+    @screen md{
+        .user-profile-container .vs-sidebar{
+            // @apply w-1/3;
+            width: 33.33333%;
+        }
+    }
+}
+
diff --git a/src/assets/scss/vuexy/apps/email.scss b/src/assets/scss/vuexy/apps/email.scss
new file mode 100644
index 0000000..7ad8ee2
--- /dev/null
+++ b/src/assets/scss/vuexy/apps/email.scss
@@ -0,0 +1,164 @@
+/*=========================================================================================
+    File Name: email.scss
+    Description: Email app's styles. This is imported in Email.vue file
+    ----------------------------------------------------------------------------------------
+    Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
+      Author: Pixinvent
+    Author URL: http://www.themeforest.net/user/pixinvent
+==========================================================================================*/
+
+
+#email-app{
+    .vs-sidebar--background{
+        position: absolute;
+    }
+    .select-all-chexkbox{
+        .vs-checkbox{
+            margin-right: 0.8rem;
+        }
+    }
+    .email-filter-scroll-area {
+        position: relative;
+        margin: auto;
+        width: 100%;
+        height: calc(100% - 75px);
+
+        &:not(.ps) {
+          overflow-y: auto;
+        }
+    }
+
+    .email-content-scroll-area {
+        position: relative;
+        margin: auto;
+        width: 100%;
+        height: calc(100% - 100px);
+
+        &:not(.ps) {
+          overflow-y: auto;
+        }
+    }
+
+    .scroll-area-mail-content {
+      position: relative;
+      margin: auto;
+      width: 100%;
+      height: calc(100% - 6.3%);
+
+      &:not(.ps) {
+        overflow-y: auto;
+      }
+    }
+
+    .email__mails {
+        .mail__opened-mail {
+            background-color: #eee;
+        }
+    }
+
+
+    .email__mails {
+
+        .email__mail-item {
+            transition: all .35s;
+
+            &:not(:first-of-type) {
+                .mail__mail-item {
+                    border-top: 1px solid #dae1e7;
+                }
+            }
+
+            .mail__mail-item {
+                transition: all 0.2s;
+
+
+                &:hover {
+                    transform: translateY(-4px);
+                    box-shadow: 0px 3px 10px 0px #ccc;
+                    transition: all 0.2s;
+                }
+
+                // Star icon color
+                .feather-icon {
+                    color: #9c9c9c;
+                }
+            }
+        }
+    }
+
+    .email-view-sidebar {
+        .vs-sidebar{
+            background-color: #f8f8f8 !important;
+            border-left: 1px solid #dae1e7;
+        }
+
+        .email-header{
+            box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.04);
+            border-bottom: 1px solid #eee;
+            z-index: 1;
+            position: relative;
+        }
+
+        .open-mail-label {
+            transition: all .35s;
+        }
+
+        .mail__attachment {
+          .vs-chip--text {
+            margin-left: 0;
+            margin-right: 0;
+          }
+        }
+    }
+}
+
+
+// COMPOSE MAIL DIALOG
+.con-vs-dialog.email-compose {
+    .vs-dialog {
+        max-width: 530px;
+        // max-height: 95vh;
+
+        .vs-dialog-text {
+            padding: 0;
+
+            .scroll-area {
+                max-height: 75vh;
+
+                &:not(.ps) {
+                  overflow-y: auto;
+                }
+            }
+
+            .compose-mail-attachment {
+              .con-input-upload {
+                margin: 0;
+              }
+            }
+        }
+    }
+
+    .con-img-upload {
+
+    .con-input-upload {
+      height: 2.5rem;
+      width: 100%;
+    }
+
+        .img-upload {
+            // height: 4rem;
+            margin: 0;
+            margin-bottom: .5rem;
+            margin-right: 1.5rem;
+        }
+    }
+
+    .quill-editor {
+        margin-bottom: 1.5rem
+    }
+
+    .ql-editor {
+        height: 150px;
+    }
+}
+
diff --git a/src/assets/scss/vuexy/apps/simple-calendar.scss b/src/assets/scss/vuexy/apps/simple-calendar.scss
new file mode 100644
index 0000000..d1fe28a
--- /dev/null
+++ b/src/assets/scss/vuexy/apps/simple-calendar.scss
@@ -0,0 +1,146 @@
+/*=========================================================================================
+    File Name: simple-calnedar.scss
+    Description: Simple Calendar app's styles. This is imported in SimpleCalendar.vue file
+    ----------------------------------------------------------------------------------------
+    Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
+      Author: Pixinvent
+    Author URL: http://www.themeforest.net/user/pixinvent
+==========================================================================================*/
+
+@import '../_variables.scss';
+
+#simple-calendar-app {
+  .theme-default {
+
+    &.cv-wrapper {
+      padding: 20px;
+    }
+
+    .cv-header-days {
+      border-bottom: 1px solid #ddd;
+    }
+
+    .cv-header,
+    .cv-header-day {
+      background-color: transparent;
+      font-weight: bold;
+    }
+
+    .cv-day {
+
+      &.draghover {
+        box-shadow: inset 0 0 0.2em 0.2em rgba(var(--vs-primary),1);
+      }
+
+      &:not(.outsideOfMonth) {
+        background-color: transparent !important;
+      }
+
+      &.outsideOfMonth {
+        background-color: rgba(241, 241, 241, 0.4);
+      }
+
+      .cv-day-number {
+        padding: 1rem;
+        @media screen and (max-width: 400px) {
+          padding: 0;
+          margin: 5px;
+        }
+      }
+
+      &.today {
+        .cv-day-number {
+          background-color: rgba(var(--vs-primary),1);
+          border-radius: 50%;
+          display: inline-table;
+          padding: 0.43rem;
+          margin: 0.4rem;
+          color: #fff;
+          text-align: center;
+          font-weight: 600;
+          min-width: 2rem;
+          min-height: 2rem;
+          @media screen and (max-width: 400px) {
+            margin: 5px;
+            padding: 0.3rem;
+          }
+        }
+      }
+
+
+    }
+
+    .cv-weeks {
+      .cv-week {
+
+        min-height: 20%;
+
+        .cv-event {
+          color: $white;
+          border: none;
+          padding-left: .5rem;
+          padding-right: .5rem;
+          font-weight: 500;
+
+          &.event-primary { background: rgba(var(--vs-primary), 1) !important; }
+          &.event-warning { background: rgba(var(--vs-warning), 1) !important; }
+          &.event-success { background: rgba(var(--vs-success), 1) !important; }
+          &.event-danger { background: rgba(var(--vs-danger), 1) !important; }
+
+          &.toBeContinued:after,
+          &.continued:before {
+            color: $white !important;
+          }
+
+          &:hover {
+            cursor: pointer;
+          }
+        }
+
+        &:first-of-type {
+          .cv-day {
+            border-top: none;
+          }
+        }
+      }
+    }
+  }
+}
+
+.theme-dark {
+  .calendar__label-container {
+    .con-vs-chip {
+      color: $white !important;
+    }
+  }
+
+  #simple-calendar-app {
+    .theme-default {
+
+      .cv-day,
+      .cv-event,
+      .cv-header-day,
+      .cv-header-days,
+      .cv-week,
+      .cv-weeks {
+        border-color: $theme-dark-border-color;
+      }
+
+      .cv-header {
+        button {
+          color: $theme-dark-text-color;
+        }
+      }
+      .cv-day {
+
+        &.outsideOfMonth {
+          background-color: #1a2140;
+        }
+
+        // .cv-day-number {
+        //   padding: 1rem;
+        // }
+      }
+    }
+  }
+}
diff --git a/src/assets/scss/vuexy/apps/todo.scss b/src/assets/scss/vuexy/apps/todo.scss
new file mode 100644
index 0000000..9933e50
--- /dev/null
+++ b/src/assets/scss/vuexy/apps/todo.scss
@@ -0,0 +1,59 @@
+/*=========================================================================================
+    File Name: todo.scss
+    Description: Todo app's styles. This is imported in Todo.vue file
+    ----------------------------------------------------------------------------------------
+    Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
+      Author: Pixinvent
+    Author URL: http://www.themeforest.net/user/pixinvent
+==========================================================================================*/
+
+
+#todo-app{
+    .vs-sidebar--background{
+        position: absolute;
+    }
+    .todo-scroll-area {
+        position: relative;
+        margin: auto;
+        width: 100%;
+        height: calc(100% - 70px);
+
+        &:not(.ps) {
+          overflow-y: auto;
+        }
+    }
+    .todo-content-scroll-area {
+        position: relative;
+        margin: auto;
+        width: 100%;
+        height: calc(100% - 50px);
+
+        &:not(.ps) {
+          overflow-y: auto;
+        }
+    }
+
+    // TRANSITION
+    .todo_todo-item {
+        transition: all .35s;
+    }
+
+    .list-item-component {
+        transition: background-color .2s, transform .2s;
+        border-top: 1px solid #dae1e7;
+        &:hover {
+            // background-color: #eee;
+            transform: translateY(-4px);
+			box-shadow: 0px 3px 10px 0px #ccc;
+            transition: all 0.2s;
+        }
+    }
+
+    .todo-list {
+      .todo-tags {
+        .con-vs-chip {
+          margin-right: 2px !important;
+        }
+      }
+    }
+}
diff --git a/src/assets/scss/vuexy/components/featherIcon.scss b/src/assets/scss/vuexy/components/featherIcon.scss
new file mode 100644
index 0000000..57c3bf9
--- /dev/null
+++ b/src/assets/scss/vuexy/components/featherIcon.scss
@@ -0,0 +1,14 @@
+/*=========================================================================================
+    File Name: featherIcon.scss
+    Description: Feather icon component's scss. Imported in FeatherIcon.vue file
+    ----------------------------------------------------------------------------------------
+    Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
+      Author: Pixinvent
+    Author URL: http://www.themeforest.net/user/pixinvent
+==========================================================================================*/
+
+
+.feather-icon {
+    display: inline-flex;
+    align-items: center;
+}
diff --git a/src/assets/scss/vuexy/components/horizontalNavMenu.scss b/src/assets/scss/vuexy/components/horizontalNavMenu.scss
new file mode 100644
index 0000000..7364185
--- /dev/null
+++ b/src/assets/scss/vuexy/components/horizontalNavMenu.scss
@@ -0,0 +1,28 @@
+@import '../_variables.scss';
+
+.menu-item {
+  .nav-link {
+    color: inherit;
+  }
+
+  .disabled-item {
+    span {
+      color: #e2e2e2;
+    }
+  }
+}
+
+.h-nav-menu-dd {
+  background-color: $white;
+  // border: 1px solid transparent;
+}
+
+/* DARK THEME */
+
+.theme-dark {
+  .h-nav-menu-dd {
+    background-color: $theme-light-dark-bg;
+    // border-color: $theme-dark-border-color;
+    box-shadow: 0px 0px 30px #0f163a !important;
+  }
+}
diff --git a/src/assets/scss/vuexy/components/horizontalNavMenuGroup.scss b/src/assets/scss/vuexy/components/horizontalNavMenuGroup.scss
new file mode 100644
index 0000000..43386f2
--- /dev/null
+++ b/src/assets/scss/vuexy/components/horizontalNavMenuGroup.scss
@@ -0,0 +1,84 @@
+@import '../_variables.scss';
+
+.menu-item {
+  > .h-nav-group-open {
+    .group-header {
+      background-color: #f6f6f6;
+
+      .theme-dark & {
+        background-color: $theme-light-dark-bg;
+      }
+    }
+  }
+}
+
+.header-children {
+  .h-nav-group-active {
+    background-color: #f6f6f6;
+
+    .theme-dark & {
+      background-color: $theme-dark-bg;
+    }
+  }
+}
+
+.h-nav-group-items {
+  border-radius: 4px;
+  min-width: 215px;
+  z-index: 1;
+
+  &.dd-left {
+    right: 0rem;
+  }
+
+  &::-webkit-scrollbar {
+   width: 5px;
+   height: 5px;
+  }
+
+  &::-webkit-scrollbar-thumb {
+   background: $grey-light;
+   border-radius: 20px;
+
+   .theme-dark & {
+    background: $theme-dark-bg;
+   }
+  }
+
+  &::-webkit-scrollbar-track {
+   // background: $theme-background;
+   background: $theme-background;
+   border-radius: 30px;
+
+   .theme-dark & {
+    background: $theme-light-dark-bg;
+   }
+  }
+}
+
+.nav-header {
+  .group-header {
+    transition: all .2s ease;
+    padding: .75rem 1.5rem;
+    &:hover {
+      transform: translateX(5px)
+    }
+  }
+}
+
+.menu-item {
+  > .h-nav-group {
+    .group-header {
+      border-radius: 4px;
+      padding: .5rem 1.5rem;
+    }
+  }
+
+  > .h-nav-group-active {
+    .group-header {
+      background: linear-gradient(118deg, rgba(var(--vs-primary),1), rgba(var(--vs-primary),.7)) !important;
+      box-shadow: 0px 0px 6px 1px rgba(var(--vs-primary), 0.6);
+      color: $white;
+    }
+  }
+}
diff --git a/src/assets/scss/vuexy/components/horizontalNavMenuHeader.scss b/src/assets/scss/vuexy/components/horizontalNavMenuHeader.scss
new file mode 100644
index 0000000..512d59f
--- /dev/null
+++ b/src/assets/scss/vuexy/components/horizontalNavMenuHeader.scss
@@ -0,0 +1,30 @@
+@import '../_variables.scss';
+
+.header-active {
+  box-shadow: 0px 0px 6px 1px rgba(var(--vs-primary), 0.6);
+}
+
+.header-label {
+  border-radius: 4px;
+}
+.header-open {
+  background-color: #f6f6f6;
+}
+
+.header-children {
+  min-width: 215px;
+  top: 100%;
+  border-radius: 4px;
+  z-index: 1;
+
+  &.dd-right {
+    right: 1rem;
+  }
+}
+
+
+.theme-dark {
+  .header-open {
+    background-color: $theme-light-dark-bg;
+  }
+}
diff --git a/src/assets/scss/vuexy/components/horizontalNavMenuItem.scss b/src/assets/scss/vuexy/components/horizontalNavMenuItem.scss
new file mode 100644
index 0000000..b2cfbcb
--- /dev/null
+++ b/src/assets/scss/vuexy/components/horizontalNavMenuItem.scss
@@ -0,0 +1,60 @@
+@import '../_variables.scss';
+
+// If items is inside drop-down
+.menu-item {
+  li {
+    .h-nav-menu-item {
+
+      a {
+        padding: .75rem 1.5rem;
+      }
+
+      & > * {
+        transition: .25s ease-in-out;
+
+        &:hover {
+          transform: translateX(5px)
+        }
+      }
+
+
+      &.h-nav-active-item {
+        background-color: #f6f6f6;
+
+        .theme-dark & {
+          background-color: $theme-dark-bg;
+        }
+      }
+    }
+
+  }
+}
+
+// If items is as nav-header
+.menu-link {
+  .h-nav-menu-item {
+
+    &:hover {
+      .nav-link {
+        background: #f6f6f6;
+
+        .theme-dark & {
+          background: $theme-light-dark-bg;
+        }
+      }
+    }
+
+    &.h-nav-active-item {
+      a {
+        background: linear-gradient(118deg, rgba(var(--vs-primary),1), rgba(var(--vs-primary),.7)) !important;
+        box-shadow: 0px 0px 6px 1px rgba(var(--vs-primary), 0.6);
+        color: #fff;
+      }
+    }
+
+    a {
+      border-radius: 4px;
+      padding: .5rem 1.5rem;
+    }
+  }
+}
diff --git a/src/assets/scss/vuexy/components/verticalNavMenu.scss b/src/assets/scss/vuexy/components/verticalNavMenu.scss
new file mode 100644
index 0000000..5298d3b
--- /dev/null
+++ b/src/assets/scss/vuexy/components/verticalNavMenu.scss
@@ -0,0 +1,215 @@
+/*=========================================================================================
+  File Name: verticalNavMenu.scss
+  Description: Styles for v-nav-menu component. Imported in VerticalNavMenu.vue file
+  ----------------------------------------------------------------------------------------
+  Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
+  Author: Pixinvent
+  Author URL: http://www.themeforest.net/user/pixinvent
+==========================================================================================*/
+
+
+@import '../_variables.scss';
+
+// swipe area/div
+.v-nav-menu-swipe-area {
+  position: fixed;
+  background: transparent;
+  height: calc(var(--vh, 1vh) * 100);
+  width: 30px;
+  z-index: 1;
+  top: 0;
+  left: 0;
+}
+
+.v-nav-menu{
+  white-space: nowrap;
+
+  .vs-sidebar--background {
+    z-index: 51000;
+  }
+
+  .vs-sidebar{
+    z-index: 1;
+    position: fixed;
+
+    .vs-sidebar--items {
+      padding: 0;
+    }
+    &.vs-sidebar-reduce{
+      max-width: $reduced-sidebar-width;
+      &:hover {
+        box-shadow: 0 15px 30px 0 rgba(0,0,0,0.11), 0 5px 15px 0 rgba(0,0,0,0.08) !important;
+      }
+
+      &:hover:not(.vs-sidebar-reduceNotRebound):not(.vs-sidebar-reduceNotHoverExpand){
+        .vs-sidebar--items {
+        }
+
+
+        .vs-sidebar-group .group-header i{
+          display: block;
+        }
+      }
+      .vs-sidebar-group .group-header i{
+        display: none;
+      }
+    }
+  }
+
+  .header-sidebar {
+    padding: 20px 19px 16px 23px;
+    width: 100%;
+    .logo{
+      img {
+        padding: 4px 0;
+      }
+    }
+
+    .feather-icon {
+    	svg {
+    		color: #7367F0;
+    	}
+    }
+  }
+
+  .shadow-bottom{
+    position: absolute;
+    z-index: 2;
+    height: 60px;
+    width: 100%;
+    pointer-events: none;
+    margin-top: -1.3rem;
+    filter: blur(5px);
+    background: linear-gradient(rgb(255, 255, 255) 41%, rgba(255, 255, 255, 0.11) 95%, rgba(255, 255, 255, 0) 100%);
+  }
+
+  .scroll-area-v-nav-menu {
+    position: relative;
+    margin: auto;
+    width: 100%;
+    height: calc(var(--vh, 1vh) * 100 - 69px);
+
+    &:not(.ps) {
+      overflow-y: auto;
+    }
+
+    > .vs-sidebar-group{
+      padding: 0 15px;
+    }
+
+    > .vs-sidebar--item{
+      padding: 0 15px;
+    }
+  }
+
+  .navigation-header{
+    font-size: 0.9rem;
+    display: block;
+    margin-bottom: 0.8rem;
+    margin-left: 2.2rem;
+    font-weight: 500;
+    text-transform: uppercase;
+    color: #999;
+
+    &:not(:first-child) {
+      margin-top: 2rem;
+    }
+  }
+
+  .feather-icon{
+    color: #565656;
+    margin-right: 14px;
+    .feather{
+      width: 20px;
+      height:20px;
+    }
+  }
+
+  .con-vs-chip {
+    min-height: 24px;
+		box-shadow: 0px 0px 7px 3px rgba(0,0,0,0.1);
+  	.vs-chip--text {
+  		color: $white;
+      font-size: .8rem;
+  	}
+  }
+
+  .vs-sidebar--item{
+    transition: none;
+    overflow: visible !important;
+    &:hover{
+      a {
+        color: inherit;
+        > * {
+          transform: translateX(5px);
+        }
+      }
+    }
+
+    &.vs-sidebar-item-active {
+	  	border: none !important;
+      font-weight: 400;
+      z-index: 1;
+      position: relative;
+	  }
+
+    a {
+      font-size: 1rem;
+      transition: none;
+      border-radius: 4px;
+	  	opacity: unset;
+      color: $content-color;
+      > * {
+        transition: transform 0.25s ease;
+      }
+      padding: 10px 15px;
+      span{
+        font-size: 15px;
+      }
+    }
+
+    &.disabled-item {
+      a {
+        span {
+          color: #e2e2e2;
+        }
+
+        .theme-dark & {
+          opacity: .3;
+        }
+      }
+    }
+
+
+
+    .router-link-active{
+      background: linear-gradient(118deg, rgba(var(--vs-primary),1), rgba(var(--vs-primary),.7));
+      box-shadow: 0px 0px 10px 1px rgba(var(--vs-primary),.7);
+      // font-weight: 400;
+      .feather-icon{
+        color: $white;
+      }
+      span{
+        color: $white;
+      }
+    }
+  }
+}
+
+#sidebar-demo {
+  .vs-sidebar{
+    z-index: 52000;
+  }
+  .vs-sidebar-staticPosition{
+    z-index: 10000;
+  }
+
+  #parentx-demo-7 {
+    .parentx:not(.show-custom-sidebar) {
+      .vs-sidebar {
+      	display: none;
+        z-index: 1 !important;
+      }
+    }
+  }
+}
diff --git a/src/assets/scss/vuexy/components/verticalNavMenuGroup.scss b/src/assets/scss/vuexy/components/verticalNavMenuGroup.scss
new file mode 100644
index 0000000..b4bc96d
--- /dev/null
+++ b/src/assets/scss/vuexy/components/verticalNavMenuGroup.scss
@@ -0,0 +1,127 @@
+/*=========================================================================================
+  File Name: verticalNavMenuGroup.scss
+  Description: Styles for v-nav-menu component. Imported in VerticalNavMenuGroup.vue file
+  ----------------------------------------------------------------------------------------
+  Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
+  Author: Pixinvent
+  Author URL: http://www.themeforest.net/user/pixinvent
+==========================================================================================*/
+
+
+.vs-sidebar-group {
+    overflow: hidden;
+    .group-header {
+        transition: all .5s ease;
+        font-size: 15px;
+        padding: 10px 15px;
+        cursor: pointer;
+        .feather-grp-header-arrow {
+            position: absolute !important;
+            right: 8px;
+            top: 12px;
+            // top: 30%;
+            transition: all .2s ease-out;
+            transform: rotate(0deg);
+            display: inline-block;
+            &.rotate90 {
+                transform: rotate(90deg);
+            }
+        }
+
+        > * {
+            transition: all .25s ease;
+        }
+        &:hover {
+            > * {
+                transform: translateX(5px);
+            }
+        }
+        .con-vs-chip{
+            margin-bottom: 0;
+        }
+    }
+
+    .vs-icon {
+        font-size: 1.5rem;
+    }
+
+    &:hover{
+        >.group-header{
+            transform: unset;
+        }
+    }
+
+    .vs-sidebar-group{
+        .group-header{
+            padding-left: 20px;
+        }
+    }
+    &.vs-sidebar-group-open,
+    &.vs-sidebar-group-active {
+      > .group-header {
+        background: #f6f6f6;
+        border-radius: 6px;
+      }
+
+      > ul {
+        padding-left: 0 !important;
+      }
+    }
+    &.vs-sidebar-group-open {
+        >.group-header {
+            cursor: pointer;
+            margin-bottom: 7px;
+        }
+        >.vs-sidebar-group-items{
+            padding-left:0;
+            .vs-sidebar--item{
+                span{
+                    padding-left: 0 0 0 2rem;
+                }
+                &:last-child{
+                    border-bottom: 0px;
+                }
+            }
+        }
+        .vs-sidebar-group{
+            overflow: visible;
+        }
+    }
+    .vs-sidebar-group-items{
+        opacity: 0;
+        .vs-sidebar--item{
+            a{
+                padding: 10px 15px 10px 20px;
+                .feather-icon{
+                    margin-right: 20px;
+                }
+            }
+            &:last-child{
+                a{
+                    margin-bottom: 0;
+                }
+            }
+        }
+        li{
+            &:last-child{
+                padding-bottom: 7px;
+            }
+        }
+
+        .vs-sidebar-group{
+            span{
+                .feather-icon{
+                    margin-right: 20px;
+                }
+            }
+            .feather-icon{
+                margin-right: 0px;
+            }
+        }
+    }
+    &.disabled-item {
+        span {
+            color: #e2e2e2;
+        }
+    }
+}
diff --git a/src/assets/scss/vuexy/components/vxAutoSuggest.scss b/src/assets/scss/vuexy/components/vxAutoSuggest.scss
new file mode 100644
index 0000000..cfb113c
--- /dev/null
+++ b/src/assets/scss/vuexy/components/vxAutoSuggest.scss
@@ -0,0 +1,40 @@
+/*=========================================================================================
+  File Name: vxAutoSuggest.scss
+  Description: Styles for vx-auto-suggest component. Imported in VxAutoSuggest.vue file
+  ----------------------------------------------------------------------------------------
+  Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
+  Author: Pixinvent
+  Author URL: http://www.themeforest.net/user/pixinvent
+==========================================================================================*/
+
+
+.vx-auto-suggest {
+    position: relative;
+
+    .vs-input{
+        .vs-con-input{
+            .vs-inputx{
+                z-index: 10;
+            }
+
+            .vs-input--placeholder {
+              top: 0;
+              z-index: 50;
+            }
+        }
+    }
+
+    .auto-suggest-suggestions-list {
+        position: absolute;
+        background: #fff;
+        width: 100%;
+        max-height: 82vh;
+        overflow-y: auto;
+
+        .auto-suggest__suggestion-group__suggestion {
+            &.vx-auto-suggest__current-selected {
+                background: #F1F1F1;
+            }
+        }
+    }
+}
diff --git a/src/assets/scss/vuexy/components/vxCard.scss b/src/assets/scss/vuexy/components/vxCard.scss
new file mode 100644
index 0000000..26c5d1b
--- /dev/null
+++ b/src/assets/scss/vuexy/components/vxCard.scss
@@ -0,0 +1,134 @@
+/*=========================================================================================
+    File Name: vxCard.scss
+    Description: Styles for vx-card component. Imported in VxCard.vue file
+    ----------------------------------------------------------------------------------------
+    Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
+      Author: Pixinvent
+    Author URL: http://www.themeforest.net/user/pixinvent
+==========================================================================================*/
+
+
+.vx-card{
+    width: 100%;
+    background: #fff;
+    border-radius: .5rem;
+    display: block;
+    box-shadow: 0px 4px 25px 0px rgba(0,0,0,.1);
+    position: relative;
+    transition: all .3s ease-in-out;
+
+    &.no-shadow { box-shadow: none; }
+    &.card-border { border: 1px solid #e4e4e4;  }
+
+    .vx-card__header {
+        display: flex;
+        align-items: center;
+        flex-wrap: wrap;
+        justify-content: space-between;
+        padding: 1.5rem 1.5rem 0;
+        .vx-card__title {
+            h4 + h6 {
+                margin-top: .3rem;
+            }
+
+            h6 {
+                font-weight: 400;
+            }
+        }
+        .vx-card__actions {
+            .vx-card__action-buttons {
+                display: flex;
+
+                & .feather-icon {
+                    margin-left: .5rem;
+                }
+            }
+            svg {
+                transition: all .25s ease-out;
+                height: 1rem;
+                width: 1rem;
+                cursor: pointer;
+            }
+            .rotate180 > svg{
+                transform: rotate(180deg) !important;
+            }
+        }
+    }
+
+    img.card-img-top{
+        border-top-left-radius: .5rem;
+        border-top-right-radius: .5rem;
+    }
+
+    .vx-card__collapsible-content {
+        transition: all .3s ease-in-out;
+
+        &.vs-con-loading__container {
+            overflow: unset;
+        }
+
+        &.collapsed {
+            opacity: 0;
+            transform: scale(0.99);
+        }
+
+        .card-overlay {
+            position: absolute;
+            top: 0;
+            right: 0;
+            bottom: 0;
+            left: 0;
+            padding: 1.25rem;
+
+            > * {
+                position: relative;
+                z-index: 1;
+            }
+
+            &::after{
+                position: absolute;
+                content: "";
+                top: 0;
+                left: 0;
+                right: 0;
+                margin: auto;
+                height: 100%;
+                width: 100%;
+                background: rgba(0,0,0,.60);
+                z-index: 0;
+            }
+        }
+
+        .vx-card__body {
+            padding: 1.5rem;
+
+            img + .vx-card__title > h4 { margin-top: 1.5rem }
+
+        }
+        img { display: block }
+    }
+
+    .vx-card__code-container {
+        overflow: hidden;
+        transition: transform 0.35s, opacity .15s, max-height .30s ease-out;
+
+        &.collapsed {
+            opacity: 0;
+            transform: translateY(100%);
+        }
+
+        .code-content {
+            margin: 1.5rem;
+
+            pre[class^="language-"] {
+                max-height: 350px;
+                border-radius: .5rem;
+                margin-bottom: 0;
+            }
+        }
+    }
+
+    .vx-card__footer {
+        padding: 0 1.5rem 1.5rem;
+    }
+}
diff --git a/src/assets/scss/vuexy/components/vxInputGroup.scss b/src/assets/scss/vuexy/components/vxInputGroup.scss
new file mode 100644
index 0000000..ee88511
--- /dev/null
+++ b/src/assets/scss/vuexy/components/vxInputGroup.scss
@@ -0,0 +1,159 @@
+@import '../_variables.scss';
+
+.vx-input-group {
+
+  .vs-con-textarea {
+    margin-bottom: 0;
+  }
+
+  // prepend style
+  .vx-input-group-prepend {
+    border-top-left-radius: 5px;
+    border-bottom-left-radius: 5px;
+
+    .prepend-text {
+      display: flex;
+      align-items: center;
+
+      &:not(:first-child) {
+        border-left: 1px solid rgba(0,0,0,0.18);
+      }
+
+      // border radius
+      &:not(:first-child) {
+        border-top-left-radius: 0;
+        border-bottom-left-radius: 0;
+
+      }
+
+      &:first-child {
+        border-top-right-radius: 0;
+        border-bottom-right-radius: 0;
+      }
+
+      &:not(:last-child) {
+        border-top-right-radius: 0;
+        border-bottom-right-radius: 0;
+
+      }
+
+      &:last-child {
+        border-top-right-radius: 0;
+        border-bottom-right-radius: 0;
+      }
+      // border radius end
+
+      &.btn-addon {
+        .vs-button {
+          border-top-right-radius: 0;
+          border-bottom-right-radius: 0;
+
+          &:not(:first-child) {
+            border-top-left-radius: 0;
+            border-bottom-left-radius: 0;
+            border-left: none;
+          }
+        }
+      }
+    }
+  }
+
+  // append style
+  .vx-input-group-append {
+    border-top-right-radius: 5px;
+    border-bottom-right-radius: 5px;
+
+    .append-text {
+      display: flex;
+      align-items: center;
+
+      &:not(:first-child) {
+        border-left: 1px solid rgba(0,0,0,0.18);
+      }
+
+      // border radius
+      // &:not(:first-child) {
+      //   border-top-right-radius: 0;
+      //   border-bottom-right-radius: 0;
+      // }
+
+      &: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;
+
+      }
+
+      &:last-child {
+        border-top-left-radius: 0;
+        border-bottom-left-radius: 0;
+      }
+      // border radius end
+
+      &.btn-addon {
+        .vs-button {
+          border-top-left-radius: 0;
+          border-bottom-left-radius: 0;
+
+          &:not(:last-child) {
+            border-top-right-radius: 0;
+            border-bottom-right-radius: 0;
+            border-right: none;
+
+          }
+        }
+      }
+    }
+  }
+
+  .prepend-text,
+  .append-text {
+    &:not(.btn-addon) {
+      border-radius: 6px;
+      padding-left: 1rem;
+      padding-right: 1rem;
+    }
+    color: $white;
+
+    &.btn-addon {
+      .vs-button {
+        height: 100%;
+        padding: 0 1.5rem !important;
+
+        // &:first-child {
+        //   border-top-right-radius: 0;
+        //   border-bottom-right-radius: 0;
+        //   padding: 100px;
+        // }
+      }
+    }
+  }
+
+  // default slot style
+  .vx-input-group-default {
+    // remove left radius if not first child
+    &:not(:first-child) {
+      input,
+      .vs-con-textarea {
+        border-top-left-radius: 0;
+        border-bottom-left-radius: 0;
+      }
+    }
+
+    .vs-input {
+      width: 100%;
+    }
+
+    // remove right radius if not last child
+    &:not(:last-child) {
+      input {
+        border-top-right-radius: 0;
+        border-bottom-right-radius: 0;
+      }
+    }
+  }
+}
diff --git a/src/assets/scss/vuexy/components/vxList.scss b/src/assets/scss/vuexy/components/vxList.scss
new file mode 100644
index 0000000..7b0c013
--- /dev/null
+++ b/src/assets/scss/vuexy/components/vxList.scss
@@ -0,0 +1,17 @@
+/*=========================================================================================
+    File Name: vxList.scss
+    Description: Styles for vx-list component. Imported in VxList.vue file
+    ----------------------------------------------------------------------------------------
+    Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
+      Author: Pixinvent
+    Author URL: http://www.themeforest.net/user/pixinvent
+==========================================================================================*/
+
+
+.list {
+    .list__item {
+        display: flex;
+        padding: .4rem;
+        align-items: flex-start;
+    }
+}
diff --git a/src/assets/scss/vuexy/components/vxTimeline.scss b/src/assets/scss/vuexy/components/vxTimeline.scss
new file mode 100644
index 0000000..0d48335
--- /dev/null
+++ b/src/assets/scss/vuexy/components/vxTimeline.scss
@@ -0,0 +1,43 @@
+/*=========================================================================================
+  File Name: vxTimeline.scss
+  Description: Styles for vx-timeline component
+  ----------------------------------------------------------------------------------------
+  Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
+  Author: Pixinvent
+  Author URL: http://www.themeforest.net/user/pixinvent
+==========================================================================================*/
+
+
+@import '../_variables.scss';
+
+.vx-timeline {
+    margin-left: 1.5rem;
+    padding-left: 40px;
+    border-left: 2px solid #E5E8EB;
+
+    .theme-dark & {
+        border-color: $theme-dark-border-color;
+    }
+
+    li {
+        position: relative;
+        margin-bottom: 20px;
+
+        .timeline-icon {
+            position: absolute;
+            top: 0;
+            left: -4.3rem;
+            border-radius: 50%;
+            padding: .75rem;
+            padding-bottom: 0.4rem;
+        }
+
+        .activity-desc {
+            font-size: .9rem;
+        }
+
+        .activity-e-time {
+            font-size: .8rem;
+        }
+    }
+}
diff --git a/src/assets/scss/vuexy/extraComponents/_awesomeSwiper.scss b/src/assets/scss/vuexy/extraComponents/_awesomeSwiper.scss
new file mode 100644
index 0000000..259e5c2
--- /dev/null
+++ b/src/assets/scss/vuexy/extraComponents/_awesomeSwiper.scss
@@ -0,0 +1,19 @@
+/*=========================================================================================
+  File Name: _awesomeSwiper.scss
+  Description: Styles for awesome swiper plugin
+  ----------------------------------------------------------------------------------------
+  Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
+    Author: Pixinvent
+  Author URL: http://www.themeforest.net/user/pixinvent
+==========================================================================================*/
+
+
+.swiper-pagination-bullet-active {
+  background: rgba(var(--vs-primary),1) !important;
+}
+
+.swiper-pagination-progressbar {
+  .swiper-pagination-progressbar-fill {
+    background: rgba(var(--vs-primary),1) !important;
+  }
+}
diff --git a/src/assets/scss/vuexy/extraComponents/_charts.scss b/src/assets/scss/vuexy/extraComponents/_charts.scss
new file mode 100644
index 0000000..d5a5069
--- /dev/null
+++ b/src/assets/scss/vuexy/extraComponents/_charts.scss
@@ -0,0 +1,13 @@
+/*=========================================================================================
+    File Name: _charts.scss
+    Description: Styles for charts.
+    ----------------------------------------------------------------------------------------
+    Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
+      Author: Pixinvent
+    Author URL: http://www.themeforest.net/user/pixinvent
+==========================================================================================*/
+
+
+.echarts{
+    width: 100% !important;
+}
diff --git a/src/assets/scss/vuexy/extraComponents/_contextMenu.scss b/src/assets/scss/vuexy/extraComponents/_contextMenu.scss
new file mode 100644
index 0000000..5561f30
--- /dev/null
+++ b/src/assets/scss/vuexy/extraComponents/_contextMenu.scss
@@ -0,0 +1,59 @@
+/*=========================================================================================
+    File Name: _contextMenu.scss
+    Description: Styles for context menu
+    ----------------------------------------------------------------------------------------
+    Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
+      Author: Pixinvent
+    Author URL: http://www.themeforest.net/user/pixinvent
+==========================================================================================*/
+
+@import '../_variables.scss';
+
+.v-context {
+  // background: $white !important;
+
+  padding: 0 !important;
+  border-radius: .4rem !important;
+  overflow: hidden;
+  box-shadow: 0 2px 8px 0 rgba(0,0,0,0.14) !important;
+  z-index: 51000 !important;
+
+  li {
+    a {
+      color: inherit !important;
+      padding: .7rem 1rem !important;
+
+      &:focus,
+      &:hover {
+        background: #eee !important;
+      }
+    }
+  }
+
+  // ul li:hover {
+  //  background: $primary !important;
+  // }
+}
+
+.theme-dark {
+  .v-context {
+    background: $theme-light-dark-bg !important;
+
+    // ul li:hover {
+    //  background: $theme-light-dark-bg !important;
+    // }
+
+    li {
+      a {
+
+        color: $theme-dark-text-color !important;
+
+        &:focus,
+        &:hover {
+          background: $theme-dark-bg !important;
+        }
+      }
+    }
+  }
+
+}
diff --git a/src/assets/scss/vuexy/extraComponents/_datePicker.scss b/src/assets/scss/vuexy/extraComponents/_datePicker.scss
new file mode 100644
index 0000000..c0396d1
--- /dev/null
+++ b/src/assets/scss/vuexy/extraComponents/_datePicker.scss
@@ -0,0 +1,86 @@
+/*=========================================================================================
+    File Name: _datePicker.scss
+    Description: Styles for datepicker component.
+    ----------------------------------------------------------------------------------------
+    Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
+      Author: Pixinvent
+    Author URL: http://www.themeforest.net/user/pixinvent
+==========================================================================================*/
+
+
+@import "../_variables.scss";
+
+.vdp-datepicker{
+    input{
+        padding: .7rem;
+        font-size: 1rem;
+        border-radius: 5px;
+        border: 1px solid rgba(0, 0, 0, .2);
+        color: $content-color;
+        width: 100%;
+    }
+
+    input[disabled] {
+      opacity: .5;
+    }
+
+    .vdp-datepicker__calendar {
+      border-radius: .5rem;
+      z-index: 401;
+
+      header {
+        .pre {
+          border-top-left-radius: .5rem;
+        }
+        .next {
+          border-top-right-radius: .5rem;
+        }
+      }
+    }
+
+    .day.blank {
+      background: transparent;
+    }
+
+    .cell {
+
+      &.day {
+        border-radius: 50%;
+
+        margin-left: 1%;
+        margin-right: 1%;
+        height: 37px;
+        line-height: 37px;
+        width: 12.285714286%;
+      }
+
+      &.month,
+      &.year {
+        border-radius: .5rem;
+      }
+
+      &:not(.blank):hover {
+        // border-color: rgba(var(--vs-primary),1) !important;
+        border-color: rgba(0,0,0,0) !important;
+        background-color: #eee;
+      }
+
+      &.day.highlighted {
+        background: rgba(var(--vs-primary),.7);
+        color: $white;
+
+        &:hover {
+          background: rgba(var(--vs-primary), 1);
+        }
+      }
+
+      &.selected {
+        color: $white;
+        background: rgba(var(--vs-primary),1) !important;
+
+        &:hover {
+          background: rgba(var(--vs-primary),1);
+        }
+      }
+    }
+}
diff --git a/src/assets/scss/vuexy/extraComponents/_datetimePicker.scss b/src/assets/scss/vuexy/extraComponents/_datetimePicker.scss
new file mode 100644
index 0000000..ce279b1
--- /dev/null
+++ b/src/assets/scss/vuexy/extraComponents/_datetimePicker.scss
@@ -0,0 +1,268 @@
+/*=========================================================================================
+    File Name: _datetimePicker.scss
+    Description: Styles for datetime picker
+    ----------------------------------------------------------------------------------------
+    Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
+    Author: Pixinvent
+    Author URL: http://www.themeforest.net/user/pixinvent
+==========================================================================================*/
+
+
+@import "../_variables.scss";
+
+$datetimePickerSpace: 13px;
+
+.flatpickr-calendar {
+  width: calc(307.875px + #{$datetimePickerSpace} * 2) !important;
+  box-shadow: 0 15px 30px 0 rgba(0,0,0,0.11), 0 5px 15px 0 rgba(0,0,0,0.08) !important;
+  border-radius: .5rem !important;
+  overflow: hidden;
+
+  &.hasWeeks {
+    width: calc(307.875px + #{$datetimePickerSpace} * 2 + 34px) !important;
+  }
+
+  &.arrowTop {
+    &:after,
+    &:before {
+      display: none;
+    }
+  }
+
+  &.arrowBottom {
+    &:after,
+    &:before {
+      display: none;
+    }
+  }
+
+  .numInputWrapper {
+    width: 5.5ch !important;
+
+    .numInput.cur-year {
+      font-weight: 600 !important;
+      color: #626262;
+    }
+
+    &:hover {
+      background: none;
+
+      .arrowUp,
+      .arrowDown {
+        border: none;
+      }
+    }
+  }
+
+  .flatpickr-months,
+  .flatpickr-month {
+    height: 44px !important;
+  }
+
+  .flatpickr-months {
+    padding: 0;
+  }
+
+  .flatpickr-monthDropdown-months {
+    color: #626262;
+    border: 1px solid rgba(0,0,0,.3) !important;
+    border-radius: .5rem !important;
+    font-size: 1rem !important;
+    font-weight: 500 !important;
+    height: 27px;
+    margin-left: 22px !important;
+    margin-right: 3px !important;
+
+    &:hover {
+      background: transparent !important;
+    }
+  }
+
+  .flatpickr-current-month {
+    bottom: -11px;
+    padding-top: 0;
+
+    .numInputWrapper {
+      vertical-align: middle;
+    }
+  }
+
+  // .flatpickr-months,
+  .flatpickr-prev-month,
+  .flatpickr-next-month,
+  .flatpickr-innerContainer {
+    padding: $datetimePickerSpace !important;
+  }
+
+  .flatpickr-prev-month,
+  .flatpickr-next-month {
+    top: calc(#{$datetimePickerSpace} - 3px) !important;
+  }
+
+  .flatpickr-prev-month {
+    left: $datetimePickerSpace !important;
+  }
+
+  .flatpickr-next-month {
+    right: $datetimePickerSpace !important;
+  }
+
+  &.inline {
+    display: block !important;
+  }
+  .flatpickr-day {
+    &.selected,
+    &.startRange,
+    &.endRange,
+    &.selected.inRange,
+    &.startRange.inRange,
+    &.endRange.inRange,
+    &.selected:focus,
+    &.startRange:focus,
+    &.endRange:focus,
+    &.selected:hover,
+    &.startRange:hover,
+    &.endRange:hover,
+    &.selected.prevMonthDay,
+    &.startRange.prevMonthDay,
+    &.endRange.prevMonthDay,
+    &.selected.nextMonthDay,
+    &.startRange.nextMonthDay,
+    &.endRange.nextMonthDay {
+      background: $primary !important;
+      -webkit-box-shadow: none;
+              box-shadow: none;
+      color: $white;
+      border-color: $primary !important;
+    }
+  }
+}
+
+.flatpickr-input {
+
+  &,
+  &[type="hidden"] + input {
+    padding: .7rem;
+    font-size: 1rem;
+    border-radius: 5px;
+    border: 1px solid rgba(0, 0, 0, .2);
+    color: $content-color;
+  }
+
+  &.active {
+    border: 1px solid $primary;
+  }
+}
+
+
+.flatpickr-months .flatpickr-prev-month:hover svg,
+.flatpickr-months .flatpickr-next-month:hover svg {
+  fill: $primary !important;
+}
+
+
+.theme-dark {
+  .flatpickr-calendar {
+    background: $theme-dark-bg;
+    border: 1px solid $theme-dark-border-color;
+
+    .flatpickr-month,
+    .flatpickr-weekday {
+      color: $white;
+    }
+
+    .flatpickr-prev-month,
+    .flatpickr-next-month {
+      svg {
+        fill: $white;
+      }
+    }
+
+    .flatpickr-monthDropdown-months {
+      background: $theme-light-dark-bg !important;
+
+      option {
+        background: $theme-dark-bg !important;
+        color: $theme-dark-text-color;
+      }
+    }
+
+    .flatpickr-day {
+      color: $theme-dark-text-color;
+      &.inRange,
+      &.prevMonthDay.inRange,
+      &.nextMonthDay.inRange,
+      &.today.inRange,
+      &.prevMonthDay.today.inRange,
+      &.nextMonthDay.today.inRange,
+      &:hover,
+      &.prevMonthDay:hover,
+      &.nextMonthDay:hover,
+      &:focus,
+      &.prevMonthDay:focus,
+      &.nextMonthDay:focus {
+        background: $theme-light-dark-bg;
+        border-color: $theme-light-dark-bg;
+      }
+
+      &.today {
+        border-color: #959ea9;
+      }
+
+      &.selected {
+        color: $white;
+      }
+
+      &.today:hover,
+      &.today:focus {
+        // border-color: $theme-light-dark-bg;
+        background: $theme-light-dark-bg;
+        color: #fff;
+      }
+
+      &.prevMonthDay,
+      &.nextMonthDay,
+      &.disabled {
+        opacity: .3;
+      }
+
+    }
+    .flatpickr-time {
+      border-top-color: $theme-dark-border-color !important;
+
+      input {
+        color: $theme-dark-text-color;
+      }
+
+
+      input:hover,
+      .flatpickr-am-pm:hover,
+      input:focus,
+      .flatpickr-am-pm:focus {
+        background: $theme-light-dark-bg;
+      }
+
+      .flatpickr-am-pm {
+        color: $theme-dark-text-color;
+      }
+
+
+      ::-moz-selection { background: transparent; }
+      ::selection { background: transparent; }
+    }
+
+    .numInputWrapper {
+      .arrowUp{
+        &:after {
+          border-bottom-color: $white;
+        }
+      }
+
+      .arrowDown {
+        &:after {
+          border-top-color: $white;
+        }
+      }
+    }
+  }
+}
diff --git a/src/assets/scss/vuexy/extraComponents/_formWizard.scss b/src/assets/scss/vuexy/extraComponents/_formWizard.scss
new file mode 100644
index 0000000..85cb4c4
--- /dev/null
+++ b/src/assets/scss/vuexy/extraComponents/_formWizard.scss
@@ -0,0 +1,50 @@
+/*=========================================================================================
+  File Name: _formWizard.scss
+  Description: Styles for form wizard externsion.
+  ----------------------------------------------------------------------------------------
+  Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
+    Author: Pixinvent
+  Author URL: http://www.themeforest.net/user/pixinvent
+==========================================================================================*/
+
+
+.vue-form-wizard.md {
+  .wizard-navigation {
+
+    .wizard-progress-with-circle {
+      top: 33px !important;
+    }
+
+    .wizard-nav {
+
+      .wizard-icon-circle {
+        border: 3px solid #cccccc;
+        width: 55px;
+        height: 55px;
+
+        .wizard-icon {
+          font-size: 1.5rem;
+        }
+      }
+
+      .stepTitle {
+        color: #626262;
+      }
+    }
+  }
+}
+
+// Change form-wizard-container font style
+i.wizard-icon {
+  font-style: inherit;
+}
+
+.stepTitle {
+  margin-top: .5rem;
+}
+
+// same height as input in form wizard
+.select-large input.vs-select--input {
+  padding: 11px;
+}
+
diff --git a/src/assets/scss/vuexy/extraComponents/_quillEditor.scss b/src/assets/scss/vuexy/extraComponents/_quillEditor.scss
new file mode 100644
index 0000000..9f606aa
--- /dev/null
+++ b/src/assets/scss/vuexy/extraComponents/_quillEditor.scss
@@ -0,0 +1,30 @@
+/*=========================================================================================
+    File Name: _quillEditor.scss
+    Description: Styles for quill editor externsion.
+    ----------------------------------------------------------------------------------------
+    Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
+      Author: Pixinvent
+    Author URL: http://www.themeforest.net/user/pixinvent
+==========================================================================================*/
+
+
+@import "../_variables.scss";
+
+.quill-editor{
+    .ql-bubble{
+        .ql-tooltip{
+            z-index: 51000;
+        }
+    }
+}
+
+.theme-dark {
+  .quill-editor{
+    .ql-snow {
+      &.ql-toolbar,
+      &.ql-container {
+        border-color: $theme-dark-border-color;
+      }
+    }
+  }
+}
diff --git a/src/assets/scss/vuexy/extraComponents/_vueSelect.scss b/src/assets/scss/vuexy/extraComponents/_vueSelect.scss
new file mode 100644
index 0000000..300c0dd
--- /dev/null
+++ b/src/assets/scss/vuexy/extraComponents/_vueSelect.scss
@@ -0,0 +1,112 @@
+/*=========================================================================================
+    File Name: _vueSelect.scss
+    Description: vue-select component style.
+    ----------------------------------------------------------------------------------------
+    Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
+      Author: Pixinvent
+    Author URL: http://www.themeforest.net/user/pixinvent
+==========================================================================================*/
+
+
+@import "../_variables.scss";
+
+.v-select {
+  &:not(.vs--single) {
+    .vs__selected {
+      font-size: .9rem;
+    }
+  }
+
+  .vs__dropdown-toggle {
+    padding: .59px 0 4px 0;
+
+    .vs__search {
+      color: $content-color;
+    }
+
+    .vs__deselect {
+      svg {
+        stroke: $content-color;
+        opacity: 0.5;
+        margin-top: 0 !important;
+      }
+    }
+
+    .vs__selected-options {
+      .vs__selected {
+        // margin: 0px 4px 0;
+      }
+    }
+
+    .vs__actions {
+
+      .vs__clear {
+        color: $content-color;
+      }
+    }
+  }
+
+  .vs__dropdown-menu  {
+    .vs__dropdown-option--highlight {
+      // background: rgba(var(--vs-primary),1) !important;
+      color: $white !important;
+    }
+
+    .vs__dropdown-option {
+      color: $content-color;
+    }
+  }
+
+
+  .vs__selected {
+    color: $content-color;
+  }
+}
+
+.theme-dark {
+  .v-select{
+      .vs__dropdown-toggle{
+          background: $content-dark-bg;
+
+          .vs__clear svg{
+              stroke: $grey;
+          }
+          .vs__deselect svg{
+              stroke: $grey;
+              opacity: 0.7;
+          }
+      }
+      &:not(.vs--single) {
+        .vs__selected{
+            // color: $white;
+            background: $dark-card-color;
+            border: none;
+        }
+      }
+      .vs__selected{
+        color: $white;
+      }
+      .vs__open-indicator{
+          fill: $grey;
+      }
+      .vs__dropdown-menu{
+          background: $content-dark-bg;
+          .vs__dropdown-option {
+            color: $theme-dark-text-color;
+          }
+      }
+  }
+}
+
+
+// Override vars
+
+//  Global Component Variables
+$vs-component-line-height: 1.8;
+
+//  Active State
+$vs-state-active-bg: $primary !default;
+$vs-state-active-color: $white !default;
+
+
+@import "~vue-select/src/scss/vue-select.scss"
diff --git a/src/assets/scss/vuexy/extraComponents/agGridStyleOverride.scss b/src/assets/scss/vuexy/extraComponents/agGridStyleOverride.scss
new file mode 100644
index 0000000..9e2a571
--- /dev/null
+++ b/src/assets/scss/vuexy/extraComponents/agGridStyleOverride.scss
@@ -0,0 +1,220 @@
+/*=========================================================================================
+    File Name: agGridStyleOverride.scss
+    Description: Override ag-grid table style/SASS vars
+    ----------------------------------------------------------------------------------------
+    Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
+    Author: Pixinvent
+    Author URL: http://www.themeforest.net/user/pixinvent
+==========================================================================================*/
+$icons-path: "~ag-grid-community/src/styles/ag-theme-material/icons/" !default;
+
+// $ag-icon-checkbox-unchecked: url('../../../images/ag-grid/checkbox-unchecked.svg');
+// $ag-icon-checkbox-checked: url('../../../images/ag-grid/checkbox-checked.svg');
+// $ag-icon-checkbox-indeterminate: url('../../../images/ag-grid/checkbox-indeterminate.svg');
+// $icon-font-family: "feather";
+// $ag-icon-checkbox-unchecked: "\E87A";
+// $ag-icon-checkbox-checked: "\E87A";
+// $ag-icon-checkbox-indeterminate: "\E87A";
+
+$font-family: inherit;
+$font-size: inherit;
+$font-weight: inherit;
+$secondary-font-family: inherit;
+$secondary-font-size: inherit;
+$secondary-font-weight: 600;
+$primary-color: #7367F0;
+
+@import "~ag-grid-community/src/styles/ag-grid.scss";
+@import "~ag-grid-community/src/styles/ag-theme-material/sass/ag-theme-material.scss";
+
+@import "../_variables.scss";
+
+.ag-grid-table {
+
+  color: inherit !important;
+
+  height: calc(var(--vh, 1vh) * 100 - 30rem);
+  @media screen and (max-height: 800px) {
+    height: 620px;
+  }
+
+  .ag-header-cell {
+    .ag-cell-label-container {
+      .ag-header-icon.ag-filter-icon {
+        display: none;
+      }
+    }
+  }
+
+  // style select of column header filter
+  .ag-filter-select {
+    padding: 0.3rem;
+    background: transparent;
+    border-radius: 5px;
+    border: 1px solid rgba(0, 0, 0, .2);
+  }
+
+  // style input of column header filter input
+  .ag-filter-filter {
+    margin-right: 10px;
+    margin-left: 10px;
+    padding-bottom: 0 !important;
+    padding-bottom: 0 !important;
+    height: 25px !important;
+    margin-top: 10px;
+    margin-bottom: 14px !important;
+  }
+
+  // remove extra padding of input in inline edit
+  .ag-input-text-wrapper {
+    input {
+      padding-bottom: 0 !important;
+    }
+  }
+
+  // Make input border bottom visible
+  .ag-floating-filter-body {
+    height: unset;
+  }
+
+  .ag-cell-inline-editing {
+    height: 62px !important;
+  }
+
+  .ag-cell-inline-editting,
+  .ag-popup-editor {
+    padding-bottom: 12px;
+  }
+
+  .ag-grid-table-actions-right {
+    @media screen and (max-width: 614px) {
+      flex-grow: 1;
+    }
+  }
+
+  .ag-grid-table-actions-left {
+    @media screen and (max-width: 614px) and (min-width: 443px) {
+      display: flex;
+      flex-grow: 1;
+      justify-content: flex-end;
+    }
+  }
+
+  // remove horizontal scroolbar from pinned columns
+  .ag-horizontal-left-spacer, .ag-horizontal-right-spacer {
+    overflow-x: auto;
+  }
+
+  .ag-icon-checkbox-checked,
+  .ag-icon-checkbox-indeterminate {
+    font-size: 22px;
+    color: rgba(var(--vs-primary),1) !important;
+  }
+
+  .ag-icon-checkbox-unchecked {
+    color: $grey !important;
+    font-size: 22px;
+  }
+
+    ::-webkit-scrollbar {
+     width: 10px;
+     height: 10px;
+    }
+
+    ::-webkit-scrollbar-thumb {
+     background: $grey-light;
+     border-radius: 20px;
+    }
+
+    ::-webkit-scrollbar-track {
+     background: $theme-background;
+     border-radius: 20px;
+    }
+}
+
+// Can not use vuexy admin variables
+// agGrid vars and imported vars may conflict
+.theme-dark {
+  .ag-grid-table {
+    &.ag-theme-material {
+      background: transparent;
+      color: $theme-dark-text-color;
+
+      .ag-header {
+        background: transparent;
+        color: $white;
+        border-bottom-color: $theme-dark-border-color;
+      }
+
+      .ag-cell-last-left-pinned {
+        border-right-color: $theme-dark-border-color !important;
+      }
+
+      .ag-floating-filter-input {
+        color: $theme-dark-text-color;
+        border-bottom-color: $theme-dark-border-color;
+      }
+
+      .ag-row-hover,
+      .ag-header-cell:hover {
+        background-color: $theme-light-dark-bg;
+      }
+
+      .ag-row-selected {
+        background: $theme-light-dark-bg;
+      }
+
+      .ag-row,
+      .ag-header-cell,
+      .ag-header-group-cell,
+      .ag-row,
+      .ag-pinned-left-header,
+      .ag-horizontal-left-spacer,
+      .ag-horizontal-right-spacer {
+        border-color: $theme-dark-border-color;
+      }
+    }
+
+    .ag-icon-checkbox-unchecked,
+    .ag-icon-filter,
+    .ag-icon-asc,
+    .ag-icon-desc {
+      color: $theme-dark-text-color !important;
+    }
+
+    .ag-filter-body-wrapper {
+      background-color: $theme-light-dark-bg;
+    }
+
+    .ag-filter-select {
+      border-color: $theme-dark-border-color;
+      color: $theme-dark-text-color;
+    }
+
+    option {
+      background-color: $theme-dark-bg;
+    }
+
+    ::-webkit-scrollbar {
+     width: 10px;
+     height: 10px;
+    }
+
+    ::-webkit-scrollbar-thumb {
+     background: $primary;
+     border-radius: 20px;
+    }
+
+    ::-webkit-scrollbar-track {
+     background: $theme-light-dark-bg;
+     border-radius: 20px;
+    }
+  }
+}
+
+// Custom Fixes
+.ag-grid-cell-chip {
+  top: 50%;
+  transform: translateY(-50%);
+  line-height: 1;
+}
diff --git a/src/assets/scss/vuexy/extraComponents/autocomplete.scss b/src/assets/scss/vuexy/extraComponents/autocomplete.scss
new file mode 100644
index 0000000..f51208c
--- /dev/null
+++ b/src/assets/scss/vuexy/extraComponents/autocomplete.scss
@@ -0,0 +1,77 @@
+@import '../_variables.scss';
+
+pre.selected.hljs {
+  margin: 8px 0;
+  height: 295px;
+  overflow: auto;
+  border: 1px solid rgba(0,0,0,.2);
+  border-radius: 5px;
+  padding: 1rem;
+}
+
+.vue-simple-suggest.designed{
+  .input-wrapper{
+    input{
+        color: inherit;
+        position: relative;
+        padding: .7rem;
+        font-size: 1rem;
+        border-radius: 5px;
+        border: 1px solid rgba(0,0,0,.2);
+        box-shadow: 0 0 0 0 rgba(0,0,0,.15);
+        transition: all .3s ease;
+        width: 100%;
+    }
+  }
+  &.focus{
+    .input-wrapper{
+      input{
+        border: 1px solid rgba(var(--vs-primary),1)!important;
+      }
+    }
+  }
+  .suggestions{
+    border-radius: 5px;
+    .suggest-item{
+      padding: .8rem 1rem;
+      &.hover, &.selected{
+        background-color: rgba(var(--vs-primary),1)!important;
+      }
+    }
+  }
+}
+
+.theme-dark {
+  .vx-card {
+    .vue-simple-suggest {
+      input {
+        background: $theme-light-dark-bg !important;
+      }
+
+      .suggestions {
+        background: $theme-light-dark-bg !important;
+      }
+
+    }
+
+    pre.selected.hljs {
+      border-color: #414561 !important;
+    }
+  }
+
+  .vue-simple-suggest {
+    input {
+      background: $theme-dark-bg !important;
+    }
+
+    .suggestions {
+      background: $theme-dark-bg !important;
+    }
+
+  }
+
+  pre.selected.hljs {
+    border-color: #414561 !important;
+  }
+
+}
diff --git a/src/assets/scss/vuexy/extraComponents/tree.scss b/src/assets/scss/vuexy/extraComponents/tree.scss
new file mode 100644
index 0000000..b372cbf
--- /dev/null
+++ b/src/assets/scss/vuexy/extraComponents/tree.scss
@@ -0,0 +1,675 @@
+@import '../_variables.scss';
+
+// TREE COMPONENT SCSS
+@-webkit-keyframes "opacity-data-v-25a85bf2" {
+	3% {
+		fill-opacity: 1;
+	}
+	75% {
+		fill-opacity: 0;
+	}
+}
+@keyframes "opacity-data-v-25a85bf2" {
+	3% {
+		fill-opacity: 1;
+	}
+	75% {
+		fill-opacity: 0;
+	}
+}
+@-webkit-keyframes "opacity-stroke-data-v-25a85bf2" {
+	10% {
+		stroke-opacity: 1;
+	}
+	85% {
+		stroke-opacity: 0;
+	}
+}
+@keyframes "opacity-stroke-data-v-25a85bf2" {
+	10% {
+		stroke-opacity: 1;
+	}
+	85% {
+		stroke-opacity: 0;
+	}
+}
+@-webkit-keyframes "colors-data-v-25a85bf2" {
+	0% {
+		fill: #9acd32;
+	}
+	10% {
+		fill: gold;
+	}
+	75% {
+		fill: crimson;
+	}
+}
+@keyframes "colors-data-v-25a85bf2" {
+	0% {
+		fill: #9acd32;
+	}
+	10% {
+		fill: gold;
+	}
+	75% {
+		fill: crimson;
+	}
+}
+@-webkit-keyframes "colors-stroke-data-v-25a85bf2" {
+	0% {
+		stroke: #9acd32;
+	}
+	10% {
+		stroke: gold;
+	}
+	75% {
+		stroke: crimson;
+	}
+}
+@keyframes "colors-stroke-data-v-25a85bf2" {
+	0% {
+		stroke: #9acd32;
+	}
+	10% {
+		stroke: gold;
+	}
+	75% {
+		stroke: crimson;
+	}
+}
+@-webkit-keyframes "colors-2-data-v-25a85bf2" {
+	0% {
+		fill: #ff0;
+	}
+	50% {
+		fill: red;
+	}
+	65% {
+		fill: #ff4500;
+	}
+	95% {
+		fill: gold;
+	}
+}
+@keyframes "colors-2-data-v-25a85bf2" {
+	0% {
+		fill: #ff0;
+	}
+	50% {
+		fill: red;
+	}
+	65% {
+		fill: #ff4500;
+	}
+	95% {
+		fill: gold;
+	}
+}
+@-webkit-keyframes "colors-3-data-v-25a85bf2" {
+	0% {
+		fill: #9acd32;
+	}
+	50% {
+		fill: #40e0d0;
+	}
+	65% {
+		fill: #ff0;
+	}
+	95% {
+		fill: orange;
+	}
+}
+@keyframes "colors-3-data-v-25a85bf2" {
+	0% {
+		fill: #9acd32;
+	}
+	50% {
+		fill: #40e0d0;
+	}
+	65% {
+		fill: #ff0;
+	}
+	95% {
+		fill: orange;
+	}
+}
+@-webkit-keyframes "transform-data-v-25a85bf2" {
+	10% {
+		-webkit-transform: scale(.75);
+		transform: scale(.75);
+	}
+}
+@keyframes "transform-data-v-25a85bf2" {
+	10% {
+		-webkit-transform: scale(.75);
+		transform: scale(.75);
+	}
+}
+@-webkit-keyframes "transform-2-data-v-25a85bf2" {
+	40% {
+		-webkit-transform: scale(.85);
+		transform: scale(.85);
+	}
+	60% {
+		stroke-width: 20;
+	}
+}
+@keyframes "transform-2-data-v-25a85bf2" {
+	40% {
+		-webkit-transform: scale(.85);
+		transform: scale(.85);
+	}
+	60% {
+		stroke-width: 20;
+	}
+}
+.halo-tree {
+	li {
+		span {
+			&:hover {
+				background-color: transparent;
+			}
+		}
+		list-style-type: none;
+		text-align: left;
+		margin: 0;
+		padding: 5px 5px 5px 15px;
+		position: relative;
+		list-style: none;
+		&:after {
+			content: "";
+			left: -8px;
+			position: absolute;
+			right: auto;
+			border-width: 1px;
+			border-top: 1px dashed #999;
+			height: 20px;
+			top: 17px;
+			width: 28px;
+		}
+		&:before {
+			content: "";
+			left: -8px;
+			position: absolute;
+			right: auto;
+			border-width: 1px;
+			border-left: 1px dashed #999;
+			bottom: 50px;
+			height: 100%;
+			top: -8px;
+			width: 1px;
+		}
+		&:last-child {
+			&:before {
+				height: 26px;
+			}
+		}
+	}
+	.expand-enter-active {
+		transition: all 3s ease;
+		height: 50px;
+		overflow: hidden;
+	}
+	.expand-leave-active {
+		transition: all 3s ease;
+		height: 0;
+		overflow: hidden;
+	}
+	.expand-enter {
+		height: 0;
+		opacity: 0;
+	}
+	.expand-leave {
+		height: 0;
+		opacity: 0;
+	}
+	font-size: 14px;
+	-webkit-transition: height .3s ease-in-out,padding-top .3s ease-in-out,padding-bottom .3s ease-in-out;
+	transition: height .3s ease-in-out,padding-top .3s ease-in-out,padding-bottom .3s ease-in-out;
+	ul {
+		box-sizing: border-box;
+		list-style-type: none;
+		text-align: left;
+		padding-left: 17px;
+		padding-top: 10px;
+	}
+	.inputCheck {
+		display: inline-block;
+		position: relative;
+		width: 14px;
+		height: 14px;
+		border: 1px solid #888;
+		border-radius: 2px;
+		top: 4px;
+		text-align: center;
+		font-size: 14px;
+		line-height: 14px;
+	}
+	.inputCheck.notAllNodes {
+		&:before {
+			content: "\2713";
+			display: block;
+			position: absolute;
+			width: 100%;
+			height: 100%;
+			background-color: #888;
+			z-index: 1;
+			color: #fff;
+		}
+	}
+	.inputCheck.box-checked {
+		&:after {
+			content: "\2713";
+			display: block;
+			position: absolute;
+			z-index: 1;
+			width: 100%;
+			text-align: center;
+		}
+	}
+	.box-halfchecked {
+		background-color: #888;
+		&:after {
+			content: "\2713";
+			display: block;
+			position: absolute;
+			z-index: 1;
+			width: 100%;
+			text-align: center;
+			color: #fff;
+		}
+	}
+	.check {
+		display: block;
+		position: absolute;
+		font-size: 14px;
+		width: 16px;
+		height: 16px;
+		left: -5px;
+		top: -4px;
+		border: 1px solid #000;
+		opacity: 0;
+		cursor: pointer;
+		-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
+		filter: alpha(opacity=0);
+		z-index: 2;
+	}
+	.chkDisabled {
+		background-color: #f5f5f5;
+		opacity: 1;
+		cursor: not-allowed;
+	}
+	>li.first-node {
+		&:before {
+			top: 17px;
+		}
+	}
+	>li.second-node {
+		&:before {
+			top: 4px;
+		}
+	}
+	>li.first-node.only-node {
+		&:before {
+			border-left: none;
+		}
+	}
+	>li.only-node {
+		&:after {
+			border-top: none;
+		}
+	}
+	>ul {
+		padding-left: 0;
+	}
+	.tree-expand {
+		display: inline-block;
+		width: 14px;
+		height: 14px;
+		text-align: center;
+		line-height: 13px;
+		border: 1px solid #888;
+		border-radius: 2px;
+		background: #fff;
+		font-style: normal;
+	}
+	.tree-open {
+		line-height: 13px;
+		&:after {
+			content: "\2013";
+		}
+	}
+	.tree-close {
+		&:after {
+			content: "+";
+		}
+	}
+	.tree-empty {
+		&:after {
+			content: "";
+		}
+	}
+	.tree-node-el {
+		background-color: #fff;
+		padding-left: 2px;
+		position: relative;
+		z-index: 3;
+	}
+	li.leaf {
+		padding-left: 15px;
+		&:after {
+			content: "";
+			left: -7px;
+			position: absolute;
+			right: auto;
+			border-width: 1px;
+			border-top: 1px dashed #999;
+			height: 20px;
+			top: 17px;
+			width: 25px;
+		}
+	}
+	.node-title {
+		padding: 3px;
+		border-radius: 3px;
+		cursor: pointer;
+		margin: 0 2px;
+		&:hover {
+			background-color: #ccc;
+		}
+	}
+	.node-title-disabled {
+		padding: 3px;
+		border-radius: 3px;
+		background-color: #f5f5f5;
+		opacity: 1;
+		cursor: not-allowed;
+		margin: 0 2px;
+		&:hover {
+			background-color: #f5f5f5;
+		}
+	}
+	.node-selected {
+		border: 1px solid #ddd;
+		background-color: #ddd;
+	}
+	.node-title.node-searched {
+		border: 1px solid #ff8247;
+	}
+}
+.fade-enter-active {
+	transition: opacity .2s;
+	transition: opacity .5s,transform .5s;
+}
+.fade-leave-active {
+	transition: opacity .2s;
+	transition: opacity .5s,transform .5s;
+	opacity: 0;
+	transform: translateY(-10px);
+}
+.fade-enter {
+	opacity: 0;
+	opacity: 0;
+	transform: translateY(-10px);
+}
+.fade-leave-to {
+	opacity: 0;
+}
+.halo-tree-search-box {
+	height: 18px;
+	line-height: 18px;
+	outline: none;
+	border: 1px solid #888;
+	border-radius: 3px;
+	&:focus {
+		border: 1px solid #108ee9;
+		-webkit-box-shadow: 0 2px 2px rgba(16,142,233,.2);
+		box-shadow: 0 2px 2px rgba(16,142,233,.2);
+		-webkit-transition: border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;
+		-o-transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s;
+		transition: border-color .15s ease-in-out,box-shadow .15s ease-in-out;
+	}
+}
+svg[data-v-25a85bf2] {
+	height: 14px;
+	width: 14px;
+	overflow: visible;
+	line-height: 14px;
+}
+circle[data-v-25a85bf2] {
+	fill: #1e90ff;
+	fill-opacity: 0;
+	-webkit-animation: opacity-data-v-25a85bf2 1.2s linear infinite;
+	animation: opacity-data-v-25a85bf2 1.2s linear infinite;
+	&:nth-child(12n+1) {
+		-webkit-animation-delay: -.1s;
+		animation-delay: -.1s;
+	}
+	&:nth-child(12n+2) {
+		-webkit-animation-delay: -.2s;
+		animation-delay: -.2s;
+	}
+	&:nth-child(12n+3) {
+		-webkit-animation-delay: -.3s;
+		animation-delay: -.3s;
+	}
+	&:nth-child(12n+4) {
+		-webkit-animation-delay: -.4s;
+		animation-delay: -.4s;
+	}
+	&:nth-child(12n+5) {
+		-webkit-animation-delay: -.5s;
+		animation-delay: -.5s;
+	}
+	&:nth-child(12n+6) {
+		-webkit-animation-delay: -.6s;
+		animation-delay: -.6s;
+	}
+	&:nth-child(12n+7) {
+		-webkit-animation-delay: -.7s;
+		animation-delay: -.7s;
+	}
+	&:nth-child(12n+8) {
+		-webkit-animation-delay: -.8s;
+		animation-delay: -.8s;
+	}
+	&:nth-child(12n+9) {
+		-webkit-animation-delay: -.9s;
+		animation-delay: -.9s;
+	}
+	&:nth-child(12n+10) {
+		-webkit-animation-delay: -1s;
+		animation-delay: -1s;
+	}
+	&:nth-child(12n+11) {
+		-webkit-animation-delay: -1.1s;
+		animation-delay: -1.1s;
+	}
+	&:nth-child(12n+12) {
+		-webkit-animation-delay: -1.2s;
+		animation-delay: -1.2s;
+	}
+}
+.g-circles--v2 {
+	circle[data-v-25a85bf2] {
+		fill-opacity: 0;
+		stroke-opacity: 0;
+		stroke-width: 1;
+		stroke: #9acd32;
+		-webkit-animation-name: opacity-stroke-data-v-25a85bf2,colors-data-v-25a85bf2,colors-stroke-data-v-25a85bf2,transform-2-data-v-25a85bf2;
+		animation-name: opacity-stroke-data-v-25a85bf2,colors-data-v-25a85bf2,colors-stroke-data-v-25a85bf2,transform-2-data-v-25a85bf2;
+	}
+}
+.g-circles--v3 {
+	circle[data-v-25a85bf2] {
+		fill-opacity: 1;
+		-webkit-animation-name: opacity-data-v-25a85bf2,colors-data-v-25a85bf2;
+		animation-name: opacity-data-v-25a85bf2,colors-data-v-25a85bf2;
+	}
+}
+.g-circles--v4 {
+	circle[data-v-25a85bf2] {
+		fill-opacity: 1;
+		fill: orange;
+		-webkit-transform-origin: 60px 60px;
+		-ms-transform-origin: 60px 60px;
+		transform-origin: 60px 60px;
+		-webkit-animation-name: opacity-data-v-25a85bf2,colors-3-data-v-25a85bf2,transform-data-v-25a85bf2;
+		animation-name: opacity-data-v-25a85bf2,colors-3-data-v-25a85bf2,transform-data-v-25a85bf2;
+	}
+}
+.tree-container {
+	position: relative;
+	width: 90%;
+	height: 36px;
+	border: 1px solid #ccc;
+  border-radius: 6px;
+  .search-input {
+    width: 96%;
+    height: 30px;
+    box-sizing: border-box;
+    margin: 5px auto 0;
+    font-size: 14px;
+    text-indent: 1em;
+    outline: none;
+    border: 1px solid #ccc;
+    border-radius: 6px;
+  }
+  .tag {
+    border: 1px solid #ccc;
+    border-radius: 6px;
+    float: left;
+    position: relative;
+    min-width: 50px;
+    height: 26px;
+    margin: 4px;
+    padding: 0 10px;
+    line-height: 26px;
+    text-align: center;
+    background-color: #fff;
+    user-select: none;
+    cursor: default;
+    transition: padding .3s;
+    .rmNode {
+      display: none;
+    }
+    &:hover {
+      padding-right: 25px;
+      >.rmNode {
+        display: block !important;
+      }
+    }
+  }
+}
+.tag-box-container {
+	position: relative;
+	width: 100%;
+	height: 36px;
+	overflow: hidden;
+}
+.tag-box {
+	width: 2000%;
+	height: 36px;
+}
+.tree-box {
+	margin-top: 3px;
+	border-radius: 6px;
+	border: 1px solid #ccc;
+	box-shadow: 0 0 5px rgba(0,0,0,.4);
+	ul {
+		margin-left: 0;
+		-webkit-padding-start: 10px;
+	}
+}
+.blank {
+	background-color: #fff;
+	border: 0;
+}
+.rmNode {
+	position: absolute;
+	right: 5px;
+	top: 5px;
+	width: 15px;
+	height: 15px;
+	line-height: 15px;
+	font-size: 12px;
+	background-color: #b3b3b3;
+	color: #ececec;
+	border-radius: 50%;
+	cursor: pointer;
+}
+
+
+
+// CUSTOM CSS
+.tree-container {
+  .tag {
+    background-color: transparent;
+  }
+}
+
+.halo-tree{
+
+  .first-node {
+    padding-left: 0;
+  }
+
+  .tree-node-el {
+    display: contents;
+  }
+
+  .tree-expand {
+    background: content-box;
+    cursor: pointer;
+    display: inline-flex;
+    align-items: center;
+    justify-content: center;
+  }
+
+  .halo-tree {
+    li {
+      padding-left: 26px;
+    }
+  }
+
+
+  ul {
+    padding-left: 17px !important;
+  }
+
+  > li.first-node.only-node::after {
+    z-index: -10;
+  }
+
+  .box-halfchecked:after {
+    top: -1px;
+  }
+
+  .inputCheck {
+    top: 2px;
+
+    &.box-checked:after {
+      top: -1px;
+    }
+  }
+
+  .node-selected {
+    background-color: #f8f8f8;
+  }
+  .node-title{
+    &:hover{
+      background-color: #f8f8f8;
+    }
+    padding: 3px 6px;
+    margin: 0 4px;
+  }
+}
+
+
+.theme-dark {
+  .tree-container {
+    .tree-box {
+      background-color: $theme-dark-bg;
+    }
+  }
+}
diff --git a/src/assets/scss/vuexy/layout/_footer.scss b/src/assets/scss/vuexy/layout/_footer.scss
new file mode 100644
index 0000000..d0ebfe4
--- /dev/null
+++ b/src/assets/scss/vuexy/layout/_footer.scss
@@ -0,0 +1,47 @@
+/*=========================================================================================
+    File Name: _footer.scss
+    Description: Footer styles
+    ----------------------------------------------------------------------------------------
+    Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
+      Author: Pixinvent
+    Author URL: http://www.themeforest.net/user/pixinvent
+==========================================================================================*/
+
+
+.footer-sticky {
+  .the-footer {
+    position: fixed;
+    background: $white;
+    bottom: 0;
+    width: calc(100% - 260px);
+    box-shadow: 0 -4px 20px 0 rgba(0, 0, 0, .05);
+    z-index: 40000;
+  }
+
+  .content-area-lg {
+    .the-footer {
+      width: calc(100% - 80px);
+    }
+  }
+
+  .content-area-full {
+    .the-footer {
+      width: 100%;
+    }
+  }
+
+  .router-view {
+    padding-bottom: 5rem;
+  }
+}
+
+.footer-hidden {
+  .the-footer {
+    display: none;
+  }
+}
+
+.the-footer {
+  padding: 1rem 2.2rem;
+}
+
diff --git a/src/assets/scss/vuexy/layout/_layoutCommon.scss b/src/assets/scss/vuexy/layout/_layoutCommon.scss
new file mode 100644
index 0000000..5f8eb27
--- /dev/null
+++ b/src/assets/scss/vuexy/layout/_layoutCommon.scss
@@ -0,0 +1,183 @@
+/*=========================================================================================
+  File Name: _layoutCommon.scss
+  Description: Common layout styles. This style will apply to all layouts
+  ----------------------------------------------------------------------------------------
+  Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
+    Author: Pixinvent
+  Author URL: http://www.themeforest.net/user/pixinvent
+==========================================================================================*/
+
+
+html {
+  font-size: $font-size-base;
+  height: 100%;
+  width: 100%;
+  line-height: 1.5;
+  letter-spacing: 0.01rem;
+}
+
+body {
+  font-family: $font-family-sans-serif;
+  background: $theme-background;
+  font-weight: 400;
+  overflow-x: hidden;
+  max-width: 100%;
+  height: 100%;
+  transition: background-color .3s ease;
+}
+
+#app {
+  min-height: 100%;
+}
+
+.vx-logo {
+  .vx-logo-text{
+    font-size: 22px;
+    font-weight: 600;
+    animation: 0.3s cubic-bezier(0.25, 0.8, 0.25, 1) 0s normal forwards 1 fadein;
+  }
+}
+
+.router-view {
+  position: relative;
+  padding: 2.2rem;
+
+  @media (max-width: 576px) {
+    padding: 1.2rem !important;
+
+
+    .footer-sticky & {
+      padding-bottom: 5rem !important;
+    }
+  }
+
+  .content-area__heading {
+    h2 {
+      color: #636363;
+    }
+  }
+}
+
+.layout--main {
+  height: 100%;
+  min-height: 100%;
+}
+
+#content-overlay {
+  position: fixed;
+  opacity: 0;
+  width: 100%;
+  height: 100%;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  background-color: rgba(0, 0, 0, 0.5);
+  cursor: pointer;
+  transition: opacity .7s;
+  z-index: -1;
+
+  .show-overlay & {
+    z-index: 41001;
+    opacity: 1;
+  }
+}
+
+.the-footer {
+  display: flex;
+  align-items: center;
+}
+
+// ======================================================================================
+// Content Area
+// ======================================================================================
+
+#content-area {
+
+  height: 100%;
+  transition: margin-left 0.5s;
+
+  .content-wrapper {
+    min-height: calc(var(--vh, 1vh) * 100 - 3.5rem);
+
+    .navbar-static & {
+      min-height: calc(var(--vh, 1vh) * 100 - 8rem);
+    }
+  }
+
+  &.content-area-reduced {
+    //margin-left: 260px;
+    float: left;
+    width: 84%;
+
+  }
+
+  &.content-area-lg {
+    margin-left: $reduced-sidebar-width;
+  }
+
+  &.content-area-full {
+    margin-left: 0px;
+  }
+}
+
+
+// ======================================================================================
+// NavBar
+// ======================================================================================
+
+.navbar-floating {
+  .router-content {
+    margin-top: 5.5rem;
+    @media (max-width: 576px) {
+      margin-top: 6rem;
+    }
+  }
+}
+
+// ======================================================================================
+// Other
+// ======================================================================================
+
+div[id$="demo"] {
+  .vx-card:not(:last-of-type) {
+    margin-bottom: 2.2rem;
+  }
+}
+
+.vue-back-to-top {
+  z-index: 51000 !important;
+}
+
+
+// ======================================================================================
+// Component Demo
+// ======================================================================================
+
+.demo-alignment {
+  display: flex;
+  flex-wrap: wrap;
+  justify-content: flex-start;
+  align-items: center;
+
+  &>* {
+    margin-right: 1.5rem;
+    margin-top: 1.5rem;
+  }
+}
+
+.op-block {
+  // background: rgb(235, 235, 235);
+  box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.1);
+  padding: 10px;
+  border-radius: 10px;
+}
+
+
+// ======================================================================================
+// Applications Page
+// ======================================================================================
+
+.no-scroll-content {
+  height: calc(var(--vh, 1vh) * 100 - 14.1rem);
+}
diff --git a/src/assets/scss/vuexy/layout/_layoutHorizontal.scss b/src/assets/scss/vuexy/layout/_layoutHorizontal.scss
new file mode 100644
index 0000000..b6b9854
--- /dev/null
+++ b/src/assets/scss/vuexy/layout/_layoutHorizontal.scss
@@ -0,0 +1,221 @@
+/*=========================================================================================
+  File Name: _layoutHorizontal.scss
+  Description: Horizontal Layout Styles
+  ----------------------------------------------------------------------------------------
+  Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
+  Author: Pixinvent
+  Author URL: http://www.themeforest.net/user/pixinvent
+==========================================================================================*/
+
+.main-horizontal {
+
+  // Navbar
+  .vx-navbar-wrapper {
+    &.nav-menu-wrapper {
+      z-index: 41000;
+    }
+
+    .vx-navbar {
+      z-index: 40001;
+    }
+
+    .search-full-container {
+      .vx-auto-suggest {
+        .auto-suggest-suggestions-list {
+          @media (min-width: 1200px) {
+            width: calc(100% - 2rem) !important;
+            margin-left: 1rem;
+          }
+        }
+      }
+    }
+  }
+
+  &.navbar-floating {
+    .vs-navbar {
+      &.vx-navbar {
+        padding-left: 1.25rem !important;
+        padding-right: 1.25rem !important;
+      }
+    }
+  }
+
+  &.navbar-sticky {
+    .router-content {
+      margin-top: 4.5rem;
+
+      @media (min-width: 1200px) {
+        margin-top: 8.89rem;
+      }
+    }
+
+    .vx-navbar-wrapper {
+      &:not(.nav-menu-wrapper) {
+        height: 62px;
+      }
+    }
+
+    .vs-navbar {
+      &:not(.vx-navbar) {
+        background-color: #f7f7f7 !important;
+      }
+    }
+  }
+
+  &.navbar-sticky,
+  &.navbar-static {
+    .vs-navbar {
+      &.vx-navbar {
+        box-shadow: 0px 10px 8px rgba(0,0,0,0.03);
+      }
+    }
+  }
+
+  &.navbar-static {
+    .router-content {
+
+      @media (min-width: 1200px) {
+        margin-top: 1rem;
+      }
+    }
+
+    #content-area {
+      .content-wrapper {
+        min-height: calc(var(--vh, 1vh) * 100 - 8rem - 62px);
+      }
+    }
+
+    .vx-navbar-wrapper {
+      &:not(.nav-menu-wrapper) {
+        @media (min-width: 1200px) {
+          position: fixed;
+        }
+      }
+
+      .vx-navbar {
+        @media (max-width: 1199px) {
+          background: transparent !important;
+          box-shadow: none;
+        }
+      }
+    }
+  }
+
+  &.navbar-hidden {
+    .vx-navbar-wrapper {
+      @media (max-width: 1199px) {
+        display: none;
+      }
+    }
+
+    .vx-navbar-wrapper {
+      position: fixed;
+
+      &.nav-menu-wrapper {
+        display: none;
+      }
+    }
+
+    .router-view {
+      @media (min-width: 1200px) {
+        margin-top: 4.5rem;
+      }
+    }
+
+  }
+
+  &:not(.navbar-static) {
+    .vx-navbar-wrapper {
+      &.nav-menu-wrapper {
+        top: 62px;
+      }
+    }
+  }
+
+  @media(min-width: 1200px) {
+    // Content Alignment
+    &.navbar-floating {
+      .router-content {
+        margin-top: 10.1rem;
+      }
+    }
+
+    /*
+      Only applies to NavMenu in horizontal layout
+      media query is given -> because navMenu in horizontal will be visible till 1200px.
+    */
+    & {
+      .vs-navbar {
+        &.vx-navbar {
+          padding-top: 0 !important;
+          padding-bottom: 0 !important;
+        }
+      }
+    }
+  }
+
+  // For application pages]
+  @media (min-width: 1200px) {
+    &.no-scroll {
+      .router-view {
+        padding-bottom: 0;
+      }
+
+      &.navbar-floating {
+        .no-scroll-content {
+          height: calc(var(--vh, 1vh) * 100 - 16rem);
+        }
+
+        &.footer-hidden {
+          .no-scroll-content {
+            height: calc(var(--vh, 1vh) * 100 - 13.4rem);
+          }
+        }
+
+        &.footer-sticky {
+          .no-scroll-content {
+            height: calc(var(--vh, 1vh) * 100 - 16.7rem);
+          }
+        }
+      }
+
+      &.navbar-sticky {
+        .no-scroll-content {
+          height: calc(var(--vh, 1vh) * 100 - 14.7rem);
+        }
+
+        &.footer-hidden {
+          .no-scroll-content {
+            height: calc(var(--vh, 1vh) * 100 - 12.7rem);
+          }
+        }
+
+        &.footer-sticky {
+          .no-scroll-content {
+            height: calc(var(--vh, 1vh) * 100 - 16.2rem);
+          }
+        }
+      }
+
+      &.navbar-static {
+        &.footer-static {
+          .no-scroll-content {
+            height: calc(var(--vh, 1vh) * 100 - 14.75rem);
+          }
+        }
+
+        &.footer-sticky {
+          .no-scroll-content {
+            height: calc(var(--vh, 1vh) * 100 - 16.7rem);
+          }
+        }
+
+        &.footer-hidden {
+          .no-scroll-content {
+            height: calc(var(--vh, 1vh) * 100 - 13rem);
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/src/assets/scss/vuexy/layout/_layoutVertical.scss b/src/assets/scss/vuexy/layout/_layoutVertical.scss
new file mode 100644
index 0000000..92009c7
--- /dev/null
+++ b/src/assets/scss/vuexy/layout/_layoutVertical.scss
@@ -0,0 +1,114 @@
+/*=========================================================================================
+  File Name: _layoutVertical.scss
+  Description: Vertical Layout Styles
+  ----------------------------------------------------------------------------------------
+  Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
+  Author: Pixinvent
+  Author URL: http://www.themeforest.net/user/pixinvent
+==========================================================================================*/
+
+
+@import '../_variables.scss';
+
+.main-vertical {
+
+  &.navbar-sticky {
+    .router-content {
+      margin-top: 4.5rem;
+    }
+  }
+
+  &.navbar-static {
+    .vx-navbar-wrapper {
+      .vx-navbar {
+        background: transparent !important;
+        box-shadow: none;
+      }
+    }
+
+    .router-content {
+      margin-top: 0.2rem;
+    }
+  }
+}
+
+// For application pages
+.no-scroll {
+  .router-view {
+    padding-bottom: 0 !important;
+  }
+
+  &.navbar-floating {
+    .no-scroll-content {
+      height: calc(var(--vh, 1vh) * 100 - 11.5rem);
+    }
+
+    &.footer-hidden {
+      .no-scroll-content {
+        height: calc(var(--vh, 1vh) * 100 - 9.3rem);
+      }
+    }
+
+    &.footer-sticky {
+      .no-scroll-content {
+        height: calc(var(--vh, 1vh) * 100 - 13.1rem);
+      }
+    }
+  }
+
+  &.navbar-sticky {
+    .no-scroll-content {
+      height: calc(var(--vh, 1vh) * 100 - 10.5rem);
+    }
+
+    &.footer-hidden {
+      .no-scroll-content {
+        height: calc(var(--vh, 1vh) * 100 - 8.3rem);
+      }
+    }
+
+    &.footer-sticky {
+      .no-scroll-content {
+        height: calc(var(--vh, 1vh) * 100 - 12.1rem);
+      }
+    }
+  }
+
+  &.navbar-static {
+    &.footer-static {
+      .no-scroll-content {
+        height: calc(var(--vh, 1vh) * 100 - 9.25rem);
+      }
+    }
+
+    &.footer-sticky {
+      .no-scroll-content {
+        height: calc(var(--vh, 1vh) * 100 - 10.9rem);
+      }
+    }
+
+    &.footer-hidden {
+      .no-scroll-content {
+        height: calc(var(--vh, 1vh) * 100 - 7rem);
+      }
+    }
+  }
+
+  &.navbar-hidden {
+    .no-scroll-content {
+      height: calc(var(--vh, 1vh) * 100 - 6rem);
+    }
+
+    &.footer-hidden {
+      .no-scroll-content {
+        height: calc(var(--vh, 1vh) * 100 - 3.8rem);
+      }
+    }
+
+    &.footer-sticky {
+      .no-scroll-content {
+        height: calc(var(--vh, 1vh) * 100 - 7.6rem);
+      }
+    }
+  }
+}
diff --git a/src/assets/scss/vuexy/layout/_theNavbar.scss b/src/assets/scss/vuexy/layout/_theNavbar.scss
new file mode 100644
index 0000000..04b5a2b
--- /dev/null
+++ b/src/assets/scss/vuexy/layout/_theNavbar.scss
@@ -0,0 +1,353 @@
+/*=========================================================================================
+  File Name: _theNavbar.scss
+  Description: The navbar styles
+  ----------------------------------------------------------------------------------------
+  Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
+    Author: Pixinvent
+  Author URL: http://www.themeforest.net/user/pixinvent
+==========================================================================================*/
+
+.vs-navbar.navbar-skelton {
+  padding: .8rem 2.2rem;
+  width: 100%;
+  transition: all .5s;
+  z-index: 10000;
+}
+
+.navbar-sticky,
+.navbar-floating {
+  .vx-navbar-wrapper {
+    position: fixed;
+  }
+}
+
+.vx-navbar-wrapper {
+  background: linear-gradient(to bottom, rgba(248, 248, 248, 0.95) 44%, rgba(248, 248, 248, 0.46) 73%, rgba(255, 255, 255, 0) 100%);
+  background-repeat-x: repeat;
+  z-index: 10;
+  width: 100%;
+  height: 103px;
+  background-repeat-y: no-repeat;
+  // position: fixed;
+  top: 0;
+  // transition: all .5s;
+
+  .vx-navbar {
+    .vs-con-items {
+      width: 100%;
+
+      .search-full-container {
+        background: $white;
+      }
+
+      .vx-auto-suggest {
+        color: $content-color;
+      }
+    }
+
+
+  }
+}
+
+@media (min-width: 1201px) {
+
+  // .vx-navbar-wrapper {
+  //   width: 100%;
+  // }
+  .main-vertical {
+    .vx-navbar-wrapper {
+      width: calc(100% - 260px);
+    }
+  }
+}
+
+.content-area-lg {
+  .vx-navbar-wrapper {
+    width: calc(100% - 80px);
+  }
+}
+
+.show-overlay .vx-navbar-wrapper {
+  background: linear-gradient(to bottom, rgba(44, 48, 60, 0.9) 44%, rgba(44, 48, 60, 0.43) 73%, rgba(44, 48, 60, 0) 100%);
+}
+
+
+/////////////////////////////////////////////////////////
+// NAVBAR VARIANTS
+/////////////////////////////////////////////////////////
+
+.navbar-floating {
+
+  .vx-navbar-wrapper {
+    @media (min-width: 577px) {
+      padding: 1.3rem 2.2rem 2.2rem;
+    }
+  }
+
+  .vx-navbar {
+    border-radius: .5rem;
+    padding: .8rem 1rem;
+
+    .search-full-container {
+      border-radius: .5rem;
+    }
+  }
+}
+
+.navbar-sticky {
+  .vx-navbar-wrapper {
+    background: none;
+
+    // .vx-navbar {
+    //   .vx-auto-suggest {
+    //     .auto-suggest-suggestions-list {
+    //       width: calc(100% - 2rem) !important;
+    //       margin-left: 1rem;
+    //     }
+    //   }
+    // }
+  }
+
+  .content-area-lg {
+    .vx-navbar-wrapper {
+      .vx-navbar {
+        width: 100%;
+      }
+    }
+  }
+}
+
+.navbar-static,
+.navbar-sticky {
+  .vx-navbar-wrapper {
+    .vx-navbar {
+      .vx-auto-suggest {
+        .auto-suggest-suggestions-list {
+          width: calc(100% - 2rem) !important;
+          margin-left: 1rem;
+        }
+      }
+    }
+  }
+}
+
+.main-vertical {
+  &.navbar-static {
+    .vx-navbar-wrapper {
+      .vx-navbar {
+        z-index: 41001;
+      }
+    }
+  }
+}
+
+
+.navbar-static {
+  .vx-navbar-wrapper {
+    background: none;
+    // position: relative;
+    height: auto;
+    width: 100%;
+
+    .vx-navbar {
+      // background: transparent !important;
+      // box-shadow: none;
+      position: relative;
+
+      // .vx-auto-suggest {
+      //   .auto-suggest-suggestions-list {
+      //     width: calc(100% - 2rem) !important;
+      //     margin-left: 1rem;
+      //   }
+      // }
+    }
+  }
+
+  .router-view {
+    padding-top: 1rem;
+  }
+}
+
+.navbar-hidden {
+  &.main-vertical {
+    .vx-navbar-wrapper {
+      display: none;
+    }
+  }
+}
+
+.search-full-container {
+  z-index: 50000;
+
+  .vx-auto-suggest {
+    >div {
+      height: 100%;
+    }
+
+    input[type="text"],
+    .input-span-placeholder {
+      padding: 1.6rem 3rem !important;
+    }
+
+    .vs-input--icon.feather {
+      top: 32% !important;
+      left: 0.8rem;
+    }
+  }
+
+  >div.feather-icon {
+    position: absolute !important;
+  }
+}
+
+// Bookmark Dropdown
+.bookmark-dropdown {
+  z-index: 41002;
+}
+
+// navbar update fixes
+.navbar-custom {
+  .vs-navbar--btn-responsive {
+    display: none !important;
+  }
+
+  .vs-spacer {
+    display: block !important;
+  }
+
+  .vs-con-items {
+    display: flex !important;
+    width: 100%;
+  }
+}
+
+@media (max-width: 1200px) {
+  .navbar-sticky {
+    .vx-navbar-wrapper {
+      .vx-navbar {
+        padding: .8rem 2.2rem;
+      }
+    }
+  }
+
+}
+
+@media (max-width: 576px) {
+  .vx-navbar-wrapper {
+    padding: 1.2rem;
+  }
+
+  .navbar-sticky {
+    .vx-navbar-wrapper {
+      padding: 0;
+
+      .vx-navbar {
+        padding: .8rem 1.5rem;
+      }
+    }
+  }
+
+  .navbar-static {
+    .vx-navbar-wrapper {
+      padding: 0;
+
+      .vx-navbar {
+        padding: .8rem 1.5rem;
+      }
+    }
+
+    &.main-vertical {
+      .router-view {
+        .router-content {
+          margin-top: 0;
+        }
+      }
+    }
+  }
+}
+
+
+// BOOKMARK
+.starred-page,
+.starred-page--more {
+  &:hover {
+    color: rgba(var(--vs-primary), 1);
+  }
+}
+
+// I18N
+.i18n-dropdown {
+  .vs-dropdown--item-link {
+    display: flex;
+    align-items: center;
+  }
+
+  @media screen and (max-width: 364px) {
+    width: 95vw;
+    left: 90vw !important;
+
+    .vs-dropdown--menu--after {
+      display: none;
+    }
+  }
+}
+
+// CART & NOTIFICATIONS DROPDOWN
+.cart-dropdown {
+  width: 365px;
+
+  .cart-dropdown-item-img {
+    max-width: 100%;
+    max-height: 100%;
+    width: auto;
+    transition: .35s;
+  }
+}
+
+.notification-dropdown,
+.cart-dropdown {
+  width: 365px;
+
+  // Full width notification in mobile devices
+  @media screen and (max-width: 500px) {
+    width: 95vw;
+    left: 97.5vw !important;
+
+    .vs-dropdown--menu--after {
+      display: none;
+    }
+  }
+
+  .notification {
+    &:hover {
+      background-color: #f7f7f7;
+    }
+  }
+
+  .checkout-footer,
+  .notification-footer {
+    background-color: #f8f8f8;
+  }
+}
+
+.scroll-area--nofications-dropdown,
+.scroll-area--cart-items-dropdowm {
+  position: relative;
+  margin: auto;
+  width: 100%;
+  max-height: 25rem;
+
+  &:not(.ps) {
+    overflow-y: auto;
+  }
+}
+
+.vx-navbar-dropdown {
+  @media screen and (max-height: 334px) {
+    top: calc(var(--vh, 1vh) * 100 - 82.5vh) !important;
+
+    .vs-dropdown--menu--after {
+      display: none;
+    }
+  }
+}
diff --git a/src/assets/scss/vuexy/pages/colors.scss b/src/assets/scss/vuexy/pages/colors.scss
new file mode 100644
index 0000000..db6ae4d
--- /dev/null
+++ b/src/assets/scss/vuexy/pages/colors.scss
@@ -0,0 +1,24 @@
+/*=========================================================================================
+    File Name: colors.scss
+    Description: Color page styles
+    ----------------------------------------------------------------------------------------
+    Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
+      Author: Pixinvent
+    Author URL: http://www.themeforest.net/user/pixinvent
+==========================================================================================*/
+
+#colors-demo {
+    ul.demo-alignment li{
+      width: 100px;
+      height: 100px;
+      margin: 10px;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      border-radius: 10px;
+      cursor: default;
+      box-shadow: 0px 15px 40px -10px rgba(0,0,0,0.3);
+      transition: all .2s ease;
+      position: relative;
+    }
+}
diff --git a/src/assets/scss/vuexy/pages/dropdown.scss b/src/assets/scss/vuexy/pages/dropdown.scss
new file mode 100644
index 0000000..d136497
--- /dev/null
+++ b/src/assets/scss/vuexy/pages/dropdown.scss
@@ -0,0 +1,33 @@
+/*=========================================================================================
+    File Name: dropdown.scss
+    Description: Dropdown page styles
+    ----------------------------------------------------------------------------------------
+    Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
+      Author: Pixinvent
+    Author URL: http://www.themeforest.net/user/pixinvent
+==========================================================================================*/
+
+.dropdown-login {
+    z-index: 55000;
+
+    .vs-dropdown--custom {
+        display: flex;
+        align-items: center;
+        flex-flow: column;
+        padding: 20px !important;
+    }
+}
+
+.dropdown-button-container {
+    display: flex;
+    align-items: center;
+
+    .btnx {
+        border-radius: 5px 0px 0px 5px;
+    }
+
+    .btn-drop {
+        border-radius: 0px 5px 5px 0px;
+        border-left: 1px solid rgba(255, 255, 255,.2);
+    }
+}
diff --git a/src/assets/scss/vuexy/pages/grid.scss b/src/assets/scss/vuexy/pages/grid.scss
new file mode 100644
index 0000000..1632130
--- /dev/null
+++ b/src/assets/scss/vuexy/pages/grid.scss
@@ -0,0 +1,53 @@
+/*=========================================================================================
+    File Name: grid.scss
+    Description: Grid page styles
+    ----------------------------------------------------------------------------------------
+    Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
+      Author: Pixinvent
+    Author URL: http://www.themeforest.net/user/pixinvent
+==========================================================================================*/
+
+
+.grid-demo__layout-container {
+    margin-top: 1.25rem;
+
+    .vs-row {
+        border-top: 1px solid #808080;
+
+        &:last-child {
+            border-bottom: 1px solid #808080;
+        }
+
+        &:not(:last-of-type) {
+            border-bottom: 0px solid #808080;
+        }
+
+        .vs-col {
+            padding: 0.5rem;
+            background-color: #eceaff;
+            border-left: 1px solid #808080;
+
+            &:last-of-type {
+                border-right: 1px solid #808080;
+            }
+        }
+    }
+
+    &--block {
+        display: flex;
+        min-height: 75px;
+        background: #f1f1f1;
+
+        .vs-row {
+            border: 0px solid #808080;
+        }
+
+        .vs-col {
+            border: 1px solid #808080;
+
+            &:not(:last-of-type) {
+                border-right: 0;
+            }
+        }
+    }
+}
diff --git a/src/assets/scss/vuexy/pages/loading.scss b/src/assets/scss/vuexy/pages/loading.scss
new file mode 100644
index 0000000..16755ff
--- /dev/null
+++ b/src/assets/scss/vuexy/pages/loading.scss
@@ -0,0 +1,79 @@
+/*=========================================================================================
+    File Name: loading.scss
+    Description: Loading page styles
+    ----------------------------------------------------------------------------------------
+    Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
+      Author: Pixinvent
+    Author URL: http://www.themeforest.net/user/pixinvent
+==========================================================================================*/
+
+@import "../_variables.scss";
+
+#loading-demo {
+    .fill-row-loading {
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        flex-wrap: wrap;
+
+        .loading-example {
+            width: 120px;
+            float: left;
+            height: 120px;
+            box-shadow: 0px 5px 20px 0px rgba(0, 0, 0, 0.05);
+
+            .theme-dark & {
+              box-shadow: 0px 5px 20px 0px $theme-dark-shadow-color;
+            }
+
+            border-radius: 10px;
+            margin: 8px;
+            transition: all 0.3s ease;
+            cursor: pointer;
+
+            .con-vs-loading {
+                z-index: 10;
+            }
+
+            &:hover {
+                box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.05);
+                transform: translate(0, 4px);
+            }
+
+            h4 {
+                z-index: 40000;
+                position: relative;
+                text-align: center;
+                padding: 10px;
+                margin-bottom: 0;
+            }
+
+            &.activeLoading {
+                opacity: 0 !important;
+                transform: scale(0.5);
+            }
+        }
+    }
+
+    .contained-example-container {
+        flex-basis: 100%;
+        justify-content: flex-start;
+
+        & > div {
+            padding: 20px;
+            width: 250px;
+            height: 250px;
+            box-shadow: 0px 5px 20px 0px rgba(0, 0, 0, 0.05);
+
+            .theme-dark & {
+              box-shadow: 0px 5px 20px 0px $theme-dark-shadow-color;
+            }
+
+            border-radius: 10px;
+
+            display: flex;
+            align-items: center;
+            justify-content: center;
+        }
+    }
+}
diff --git a/src/assets/scss/vuexy/pages/profile.scss b/src/assets/scss/vuexy/pages/profile.scss
new file mode 100644
index 0000000..cb040c7
--- /dev/null
+++ b/src/assets/scss/vuexy/pages/profile.scss
@@ -0,0 +1,38 @@
+/*=========================================================================================
+    File Name: profile.scss
+    Description: Profile page styles
+    ----------------------------------------------------------------------------------------
+    Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
+      Author: Pixinvent
+    Author URL: http://www.themeforest.net/user/pixinvent
+==========================================================================================*/
+
+
+#profile-page {
+    .profile-img-container {
+        display: flex;
+        align-items: center;
+        position: absolute;
+        bottom: -3.6rem;
+        left: 10%;
+        width: 80%;
+        justify-content: space-between;
+    }
+
+    .user-profile-img {
+        border: .3rem solid #fff;
+        box-shadow: 0px 0px 10px 3px rgba(0,0,0,0.3);
+    }
+
+    .user-latest-image {
+        transition: all .2s ease-in-out;
+
+        &:hover {
+            transform: scale(1.2);
+        }
+    }
+
+    .profile-header-nav {
+        background-color: #fff;
+    }
+}
diff --git a/src/assets/scss/vuexy/pages/search.scss b/src/assets/scss/vuexy/pages/search.scss
new file mode 100644
index 0000000..4571788
--- /dev/null
+++ b/src/assets/scss/vuexy/pages/search.scss
@@ -0,0 +1,19 @@
+/*=========================================================================================
+    File Name: search.scss
+    Description: Search page styles
+    ----------------------------------------------------------------------------------------
+    Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
+      Author: Pixinvent
+    Author URL: http://www.themeforest.net/user/pixinvent
+==========================================================================================*/
+
+
+.search-tab-filter {
+    padding: .5rem 1rem;
+    border-radius: 25px;
+    margin-right: 1rem;
+    margin-bottom: 1.5rem;
+    background: #fff;
+    // box-shadow: 0 15px 30px 0 rgba(0,0,0,0.11), 0 5px 15px 0 rgba(0,0,0,0.08);
+    cursor: pointer;
+}
diff --git a/src/assets/scss/vuexy/pages/sidebar.scss b/src/assets/scss/vuexy/pages/sidebar.scss
new file mode 100644
index 0000000..498eed1
--- /dev/null
+++ b/src/assets/scss/vuexy/pages/sidebar.scss
@@ -0,0 +1,79 @@
+/*=========================================================================================
+    File Name: sidebar.scss
+    Description: Sidebar component style
+    ----------------------------------------------------------------------------------------
+    Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
+      Author: Pixinvent
+    Author URL: http://www.themeforest.net/user/pixinvent
+==========================================================================================*/
+
+
+@import "../_variables.scss";
+
+// Note: This styles are regrading demo/default sidebar. If you are creating your custom sidebar or changing something. Be sure to take care of CSS.
+.vs-content-sidebar.sidebarpage {
+  .vs-sidebar {
+    .vs-sidebar--header {
+      .header-sidebar {
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        flex-direction: column;
+        width: 100%;
+
+        h4 {
+          display: flex;
+          align-items: center;
+          justify-content: center;
+          width: 100%;
+
+          >button {
+            margin-left: 10px;
+          }
+        }
+      }
+    }
+
+    .vs-sidebar--footer {
+      .footer-sidebar {
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+
+        >button {
+          border: 0px solid rgba(0, 0, 0, 0) !important;
+          border-left: 1px solid rgba(0, 0, 0, .07) !important;
+          border-radius: 0px !important;
+        }
+      }
+    }
+
+    .vs-sidebar--item {
+      i.material-icons {
+        font-size: 1.2rem;
+      }
+    }
+  }
+
+  &.sidebar-demo-parent {
+    .vs-sidebar {
+      z-index: 10000 !important;
+    }
+  }
+
+  .vs-sidebar--background {
+    z-index: 52000;
+  }
+}
+
+
+.theme-dark{
+  .vs-content-sidebar.sidebarpage {
+    &.bordered-sidebar {
+      .vs-sidebar {
+        border: 1px solid $theme-dark-border-color;
+      }
+    }
+
+  }
+}
diff --git a/src/assets/scss/vuexy/pages/switch.scss b/src/assets/scss/vuexy/pages/switch.scss
new file mode 100644
index 0000000..c76cfc9
--- /dev/null
+++ b/src/assets/scss/vuexy/pages/switch.scss
@@ -0,0 +1,18 @@
+/*=========================================================================================
+    File Name: switch.scss
+    Description: Switch page styles
+    ----------------------------------------------------------------------------------------
+    Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
+      Author: Pixinvent
+    Author URL: http://www.themeforest.net/user/pixinvent
+==========================================================================================*/
+
+.demo-alignment {
+    li {
+        margin-right: 2rem;
+    }
+
+    .vs-switch {
+        margin-top: .5rem;
+    }
+}
diff --git a/src/assets/scss/vuexy/rtl/_rtlFixes.scss b/src/assets/scss/vuexy/rtl/_rtlFixes.scss
new file mode 100644
index 0000000..d39707c
--- /dev/null
+++ b/src/assets/scss/vuexy/rtl/_rtlFixes.scss
@@ -0,0 +1,106 @@
+/*=========================================================================================
+  File Name: _rtlFixes.scss
+  Description: partial - rtl fix - fixes rtl specific issues
+  ----------------------------------------------------------------------------------------
+  Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
+    Author: Pixinvent
+  Author URL: http://www.themeforest.net/user/pixinvent
+==========================================================================================*/
+
+/*! rtl:begin:ignore */
+
+.vuesax-app-is-rtl {
+
+  /////////////////////////////////////////////////////////
+  // EXTENSION - PERFECT SCROLLBAR
+  /////////////////////////////////////////////////////////
+
+  .ps-container:not(.enable-rtl-x-scroll) {
+    .ps__scrollbar-x-rail {
+      display: none !important;
+    }
+  }
+
+  .ag-pinned-left-cols-container {
+    margin-right: 5px;
+  }
+
+
+  /////////////////////////////////////////////////////////
+  // VUESAX FRAMEWORK
+  /////////////////////////////////////////////////////////
+
+  .vs-dropdown-menu.rightx {
+    .vs-dropdown--menu--after {
+      right: unset !important;
+      left: 30px !important;
+    }
+  }
+
+  .vs-loading {
+    > * {
+      top: 0;
+    }
+  }
+
+
+  .con-vs-dropdown--menu {
+    transform: translateX(-100%);
+  }
+
+  .vx-navbar-dropdown {
+
+    &.dropdownx-enter,
+    &.dropdownx-leave-to {
+      transform: translateY(8px) !important;
+    }
+
+    @media (max-width: 500px) {
+      &.dropdown-custom {
+        &.con-vs-dropdown--menu {
+          transform: translateX(100%);
+        }
+
+        &.dropdownx-enter,
+        &.dropdownx-leave-to {
+          transform: translate(100%,8px) !important;
+        }
+      }
+    }
+  }
+
+
+  /////////////////////////////////////////////////////////
+  // EXTENSTION - DATETIME PICKER
+  /////////////////////////////////////////////////////////
+
+  .flatpickr-prev-month,
+  .flatpickr-next-month {
+    transform: rotateY(180deg);
+  }
+
+
+  /////////////////////////////////////////////////////////
+  // EXTENSTION - CAROUSEL
+  /////////////////////////////////////////////////////////
+
+  .swiper-container-cube.swiper-container-rtl {
+    .swiper-slide {
+      transform-origin: 100% 0 !important;
+    }
+  }
+
+
+  /////////////////////////////////////////////////////////
+  // COMPONENT
+  /////////////////////////////////////////////////////////
+
+  .scroll-area-v-nav-menu {
+    .ps__scrollbar-y-rail {
+      right: unset !important;
+      left: -6px !important;
+    }
+  }
+}
+
+/*! rtl:end:ignore */
diff --git a/src/assets/scss/vuexy/rtl/_rtlOverrides.scss b/src/assets/scss/vuexy/rtl/_rtlOverrides.scss
new file mode 100644
index 0000000..aac761a
--- /dev/null
+++ b/src/assets/scss/vuexy/rtl/_rtlOverrides.scss
@@ -0,0 +1,72 @@
+/*=========================================================================================
+  File Name: _rtlOverrides.scss
+  Description: partial - rtl fix - fixes styles overridden by rtl
+  ----------------------------------------------------------------------------------------
+  Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
+    Author: Pixinvent
+  Author URL: http://www.themeforest.net/user/pixinvent
+==========================================================================================*/
+
+// //////////////////////////////////////////
+// Tour
+// //////////////////////////////////////////
+
+/*! rtl:begin:ignore */
+.v-step {
+  &[x-placement^=bottom] {
+    .v-step__arrow {
+      border-left-color: transparent !important;
+      border-right-color: transparent !important;
+    }
+  }
+  &[x-placement^=left] {
+    .v-step__arrow {
+      border-bottom-color: transparent !important;
+      border-right-color: transparent !important;
+      border-top-color: transparent !important;
+    }
+  }
+  &[x-placement^=top] {
+    .v-step__arrow {
+      border-bottom-color: transparent !important;
+      border-right-color: transparent !important;
+      border-left-color: transparent !important;
+    }
+  }
+  &[x-placement^=right] {
+    .v-step__arrow {
+      border-bottom-color: transparent !important;
+      border-top-color: transparent !important;
+      border-left-color: transparent !important;
+    }
+  }
+}
+
+
+
+// //////////////////////////////////////////
+// Carousel
+// //////////////////////////////////////////
+
+
+.swiper-container-rtl {
+  .swiper-button-prev {
+    right: 10px !important;
+    left: auto !important;
+  }
+  .swiper-button-next {
+    left: 10px !important;
+    right: auto !important;
+  }
+}
+
+
+
+// //////////////////////////////////////////
+// video.js
+// //////////////////////////////////////////
+
+.vjs-fluid {
+  padding-top: 41.66666666666667% !important;
+}
+/*! rtl:end:ignore */
diff --git a/src/assets/scss/vuexy/themes/_themeDark.scss b/src/assets/scss/vuexy/themes/_themeDark.scss
new file mode 100644
index 0000000..fa67e6e
--- /dev/null
+++ b/src/assets/scss/vuexy/themes/_themeDark.scss
@@ -0,0 +1,1555 @@
+/*=========================================================================================
+    File Name: _themeDark.scss
+    Description: partial- Styles for dark theme
+    ----------------------------------------------------------------------------------------
+    Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
+      Author: Pixinvent
+    Author URL: http://www.themeforest.net/user/pixinvent
+==========================================================================================*/
+
+
+.theme-dark {
+
+  // Changes color code of dark color
+  --vs-dark: 184,194,204;
+
+  background-color: $content-dark-bg;
+  color: $theme-dark-text-color !important;
+
+  .main-vertical {
+    &.navbar-static {
+      .vx-navbar-wrapper {
+        background: none;
+      }
+    }
+  }
+
+  .main-horizontal {
+    .menu-item {
+      .h-nav-menu-item {
+        &.disabled-item {
+          opacity: .3;
+        }
+      }
+    }
+
+    .vx-navbar-wrapper {
+      &:not(.nav-menu-wrapper) {
+        @media (min-width: 1200px) {
+          background: none !important;
+        }
+      }
+    }
+
+    &.navbar-sticky {
+      .vs-navbar {
+        &:not(.vx-navbar) {
+          // body dark bg
+          background-color: $theme-light-dark-bg !important;
+        }
+      }
+    }
+
+    &.navbar-static {
+      .vs-navbar {
+        &:not(.vx-navbar) {
+          &.d-theme-dark-light-bg {
+            background-color: $theme-light-dark-bg !important;
+          }
+        }
+      }
+    }
+  }
+
+
+  .content-area__heading {
+    h2 {
+      color: $theme-dark-heading-color;
+    }
+  }
+
+  code {
+    color: $grey;
+    background: $content-dark-bg;
+  }
+
+  pre[class*="language-"] {
+    background-color: $dark;
+    text-shadow: none;
+
+    code {
+      background-color: transparent;
+
+      &[class*="language-"] {
+        text-shadow: none;
+      }
+    }
+  }
+
+  // Label
+  label {
+    color: $theme-dark-text-color;
+  }
+
+  h1,
+  h2,
+  h3,
+  h4,
+  h5,
+  h6 {
+    color: $theme-dark-heading-color;
+
+  }
+
+  ul.bordered-items {
+    li {
+      border-color: $theme-dark-border-color !important;
+    }
+  }
+
+  // Notification
+  .notification-dropdown,
+  .cart-dropdown {
+
+    .notification:hover,
+    .cart-item:hover {
+      background: $dark-card-color;
+    }
+
+    .checkout-footer,
+    .notification-footer {
+      background-color: $theme-light-dark-bg;
+    }
+
+    .checkout-footer:hover,
+    .notification-footer:hover {
+      background-color: $theme-dark-bg;
+    }
+  }
+
+  .vs-component {
+    &.vs-notifications {
+      &.vs-noti-dark {
+        color: $black !important;
+
+        .filling {
+          background: $grey !important;
+        }
+
+        h3 {
+          color: $black !important;
+        }
+      }
+    }
+  }
+
+  // Card
+  .vx-card {
+    background-color: $dark-card-color;
+
+    &.card-border {
+      border-color: $theme-dark-border-color;
+    }
+
+    .vx-card__title {
+      h4 {
+        color: $theme-dark-heading-color;
+      }
+    }
+
+    .con-vs-alert-dark {
+      color: $grey-light;
+    }
+
+    .code-content {
+      pre[class^="language-"] {
+        background-color: $content-dark-bg;
+        text-shadow: none;
+
+        code {
+          background-color: transparent;
+
+          &[class*="language-"] {
+            text-shadow: none;
+          }
+        }
+      }
+    }
+
+    .vx-card__body {
+      .con-vs-alert-primary {
+        h4 {
+          color: rgba(var(--vs-primary), 1);
+        }
+      }
+
+      .con-vs-alert-success {
+        h4 {
+          color: rgba(var(--vs-success), 1);
+        }
+      }
+
+      .con-vs-alert-danger {
+        h4 {
+          color: rgba(var(--vs-danger), 1);
+        }
+      }
+
+      .con-vs-alert-info {
+        h4 {
+          color: rgba(var(--vs-info), 1);
+        }
+      }
+
+      .con-vs-alert-warning {
+        h4 {
+          color: rgba(var(--vs-warning), 1);
+        }
+      }
+    }
+
+    // Card-analytics
+    .tasks-today-container {
+      .tasks-today__task {
+        &:hover {
+          background: $table-dark-stripe !important;
+        }
+      }
+    }
+  }
+
+  .vx-navbar-wrapper {
+    background: linear-gradient(to bottom, rgba(44, 48, 60, 0.9) 44%, rgba(44, 48, 60, 0.43) 73%, rgba(44, 48, 60, 0) 100%);
+
+    .vs-navbar {
+      .search-full-container {
+        background-color: $dark-card-color !important;
+
+        .vx-auto-suggest {
+          input {
+            background: $dark-card-color;
+          }
+        }
+      }
+
+      .vx-auto-suggest {
+        .auto-suggest-suggestions-list {
+          .auto-suggest__suggestion-group__suggestion {
+            &.vx-auto-suggest__current-selected {
+              background: $dark-card-color;
+              color: $white;
+            }
+
+            color: $theme-dark-text-color;
+          }
+        }
+      }
+    }
+  }
+
+  // Vertical NavMenu
+  .v-nav-menu {
+    .vs-sidebar {
+      background-color: $sidebar-dark-bg;
+    }
+
+    .shadow-bottom {
+      width: 94%;
+      background: linear-gradient(to bottom, rgb(15, 22, 66) 44%, rgba(15, 22, 66, 0.51) 73%, rgba(44, 48, 60, 0) 100%)
+    }
+
+    .scroll-area-v-nav-menu {
+
+      .feather-icon,
+      span:not(.vs-chip--text) {
+        color: $theme-dark-text-color;
+      }
+
+      a {
+        &:not(.router-link-active) {
+          .feather-icon {
+
+            svg,
+            span {
+              color: $theme-dark-text-color;
+            }
+          }
+        }
+
+        &.router-link-active {
+          span {
+            color: $white;
+          }
+        }
+      }
+
+      .vs-sidebar-group {
+        &.vs-sidebar-group-active {
+          >.group-header {
+            background: $content-dark-bg;
+          }
+        }
+
+        &.vs-sidebar-group-open {
+          >.group-header {
+            background: $content-dark-bg;
+          }
+        }
+      }
+    }
+  }
+
+  // Sidebar Perfect Scrollbar
+  .ps {
+    &:hover {
+      &>.ps__scrollbar-y-rail {
+        &:hover {
+          background-color: $dark-card-color;
+        }
+      }
+    }
+  }
+
+  // Grid
+  .grid-demo__layout-container {
+    .vs-row {
+      .vs-col {
+        background-color: $table-dark-stripe;
+
+        &:last-of-type {
+          background-color: $table-dark-stripe;
+        }
+      }
+    }
+  }
+
+  .grid-demo__layout-container--block {
+    .vs-row {
+      background-color: $table-dark-stripe;
+    }
+  }
+
+  // Chat card of ecommerce page
+  .chat-card-log {
+    .flex-row-reverse {
+      .msg {
+        &.chat-sent-msg {
+          background-color: $sidebar-dark-bg !important;
+        }
+      }
+    }
+
+    .msg {
+      background-color: $table-dark-stripe !important;
+    }
+  }
+
+  .chat-input-container,
+  .chat__input {
+    background-color: $dark-card-color !important;
+    border-top: 1px solid $table-dark-stripe;
+  }
+
+  // Chat App
+  #chat-app {
+    .chat__profile-search {
+      .vs-inputx {
+        border-color: $theme-dark-border-color !important;
+      }
+    }
+
+    #chat-list-sidebar {
+      .chat-scroll-area {
+        .chat__contact:hover {
+          background: $dark-card-color;
+        }
+      }
+    }
+
+    .chat__header {
+      header {
+        background: $table-dark-stripe !important;
+
+        h6 {
+          color: $theme-dark-heading-color;
+        }
+      }
+    }
+
+    .chat__bg {
+      background-color: $theme-dark-secondary-bg;
+      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='260' height='260' viewBox='0 0 260 260'%3E%3Cg fill-rule='evenodd'%3E%3Cg fill='%236f76a1' fill-opacity='0.4'%3E%3Cpath d='M24.37 16c.2.65.39 1.32.54 2H21.17l1.17 2.34.45.9-.24.11V28a5 5 0 0 1-2.23 8.94l-.02.06a8 8 0 0 1-7.75 6h-20a8 8 0 0 1-7.74-6l-.02-.06A5 5 0 0 1-17.45 28v-6.76l-.79-1.58-.44-.9.9-.44.63-.32H-20a23.01 23.01 0 0 1 44.37-2zm-36.82 2a1 1 0 0 0-.44.1l-3.1 1.56.89 1.79 1.31-.66a3 3 0 0 1 2.69 0l2.2 1.1a1 1 0 0 0 .9 0l2.21-1.1a3 3 0 0 1 2.69 0l2.2 1.1a1 1 0 0 0 .9 0l2.21-1.1a3 3 0 0 1 2.69 0l2.2 1.1a1 1 0 0 0 .86.02l2.88-1.27a3 3 0 0 1 2.43 0l2.88 1.27a1 1 0 0 0 .85-.02l3.1-1.55-.89-1.79-1.42.71a3 3 0 0 1-2.56.06l-2.77-1.23a1 1 0 0 0-.4-.09h-.01a1 1 0 0 0-.4.09l-2.78 1.23a3 3 0 0 1-2.56-.06l-2.3-1.15a1 1 0 0 0-.45-.11h-.01a1 1 0 0 0-.44.1L.9 19.22a3 3 0 0 1-2.69 0l-2.2-1.1a1 1 0 0 0-.45-.11h-.01a1 1 0 0 0-.44.1l-2.21 1.11a3 3 0 0 1-2.69 0l-2.2-1.1a1 1 0 0 0-.45-.11h-.01zm0-2h-4.9a21.01 21.01 0 0 1 39.61 0h-2.09l-.06-.13-.26.13h-32.31zm30.35 7.68l1.36-.68h1.3v2h-36v-1.15l.34-.17 1.36-.68h2.59l1.36.68a3 3 0 0 0 2.69 0l1.36-.68h2.59l1.36.68a3 3 0 0 0 2.69 0L2.26 23h2.59l1.36.68a3 3 0 0 0 2.56.06l1.67-.74h3.23l1.67.74a3 3 0 0 0 2.56-.06zM-13.82 27l16.37 4.91L18.93 27h-32.75zm-.63 2h.34l16.66 5 16.67-5h.33a3 3 0 1 1 0 6h-34a3 3 0 1 1 0-6zm1.35 8a6 6 0 0 0 5.65 4h20a6 6 0 0 0 5.66-4H-13.1z'/%3E%3Cpath id='path6_fill-copy' d='M284.37 16c.2.65.39 1.32.54 2H281.17l1.17 2.34.45.9-.24.11V28a5 5 0 0 1-2.23 8.94l-.02.06a8 8 0 0 1-7.75 6h-20a8 8 0 0 1-7.74-6l-.02-.06a5 5 0 0 1-2.24-8.94v-6.76l-.79-1.58-.44-.9.9-.44.63-.32H240a23.01 23.01 0 0 1 44.37-2zm-36.82 2a1 1 0 0 0-.44.1l-3.1 1.56.89 1.79 1.31-.66a3 3 0 0 1 2.69 0l2.2 1.1a1 1 0 0 0 .9 0l2.21-1.1a3 3 0 0 1 2.69 0l2.2 1.1a1 1 0 0 0 .9 0l2.21-1.1a3 3 0 0 1 2.69 0l2.2 1.1a1 1 0 0 0 .86.02l2.88-1.27a3 3 0 0 1 2.43 0l2.88 1.27a1 1 0 0 0 .85-.02l3.1-1.55-.89-1.79-1.42.71a3 3 0 0 1-2.56.06l-2.77-1.23a1 1 0 0 0-.4-.09h-.01a1 1 0 0 0-.4.09l-2.78 1.23a3 3 0 0 1-2.56-.06l-2.3-1.15a1 1 0 0 0-.45-.11h-.01a1 1 0 0 0-.44.1l-2.21 1.11a3 3 0 0 1-2.69 0l-2.2-1.1a1 1 0 0 0-.45-.11h-.01a1 1 0 0 0-.44.1l-2.21 1.11a3 3 0 0 1-2.69 0l-2.2-1.1a1 1 0 0 0-.45-.11h-.01zm0-2h-4.9a21.01 21.01 0 0 1 39.61 0h-2.09l-.06-.13-.26.13h-32.31zm30.35 7.68l1.36-.68h1.3v2h-36v-1.15l.34-.17 1.36-.68h2.59l1.36.68a3 3 0 0 0 2.69 0l1.36-.68h2.59l1.36.68a3 3 0 0 0 2.69 0l1.36-.68h2.59l1.36.68a3 3 0 0 0 2.56.06l1.67-.74h3.23l1.67.74a3 3 0 0 0 2.56-.06zM246.18 27l16.37 4.91L278.93 27h-32.75zm-.63 2h.34l16.66 5 16.67-5h.33a3 3 0 1 1 0 6h-34a3 3 0 1 1 0-6zm1.35 8a6 6 0 0 0 5.65 4h20a6 6 0 0 0 5.66-4H246.9z'/%3E%3Cpath d='M159.5 21.02A9 9 0 0 0 151 15h-42a9 9 0 0 0-8.5 6.02 6 6 0 0 0 .02 11.96A8.99 8.99 0 0 0 109 45h42a9 9 0 0 0 8.48-12.02 6 6 0 0 0 .02-11.96zM151 17h-42a7 7 0 0 0-6.33 4h54.66a7 7 0 0 0-6.33-4zm-9.34 26a8.98 8.98 0 0 0 3.34-7h-2a7 7 0 0 1-7 7h-4.34a8.98 8.98 0 0 0 3.34-7h-2a7 7 0 0 1-7 7h-4.34a8.98 8.98 0 0 0 3.34-7h-2a7 7 0 0 1-7 7h-7a7 7 0 1 1 0-14h42a7 7 0 1 1 0 14h-9.34zM109 27a9 9 0 0 0-7.48 4H101a4 4 0 1 1 0-8h58a4 4 0 0 1 0 8h-.52a9 9 0 0 0-7.48-4h-42z'/%3E%3Cpath d='M39 115a8 8 0 1 0 0-16 8 8 0 0 0 0 16zm6-8a6 6 0 1 1-12 0 6 6 0 0 1 12 0zm-3-29v-2h8v-6H40a4 4 0 0 0-4 4v10H22l-1.33 4-.67 2h2.19L26 130h26l3.81-40H58l-.67-2L56 84H42v-6zm-4-4v10h2V74h8v-2h-8a2 2 0 0 0-2 2zm2 12h14.56l.67 2H22.77l.67-2H40zm13.8 4H24.2l3.62 38h22.36l3.62-38z'/%3E%3Cpath d='M129 92h-6v4h-6v4h-6v14h-3l.24 2 3.76 32h36l3.76-32 .24-2h-3v-14h-6v-4h-6v-4h-8zm18 22v-12h-4v4h3v8h1zm-3 0v-6h-4v6h4zm-6 6v-16h-4v19.17c1.6-.7 2.97-1.8 4-3.17zm-6 3.8V100h-4v23.8a10.04 10.04 0 0 0 4 0zm-6-.63V104h-4v16a10.04 10.04 0 0 0 4 3.17zm-6-9.17v-6h-4v6h4zm-6 0v-8h3v-4h-4v12h1zm27-12v-4h-4v4h3v4h1v-4zm-6 0v-8h-4v4h3v4h1zm-6-4v-4h-4v8h1v-4h3zm-6 4v-4h-4v8h1v-4h3zm7 24a12 12 0 0 0 11.83-10h7.92l-3.53 30h-32.44l-3.53-30h7.92A12 12 0 0 0 130 126z'/%3E%3Cpath d='M212 86v2h-4v-2h4zm4 0h-2v2h2v-2zm-20 0v.1a5 5 0 0 0-.56 9.65l.06.25 1.12 4.48a2 2 0 0 0 1.94 1.52h.01l7.02 24.55a2 2 0 0 0 1.92 1.45h4.98a2 2 0 0 0 1.92-1.45l7.02-24.55a2 2 0 0 0 1.95-1.52L224.5 96l.06-.25a5 5 0 0 0-.56-9.65V86a14 14 0 0 0-28 0zm4 0h6v2h-9a3 3 0 1 0 0 6H223a3 3 0 1 0 0-6H220v-2h2a12 12 0 1 0-24 0h2zm-1.44 14l-1-4h24.88l-1 4h-22.88zm8.95 26l-6.86-24h18.7l-6.86 24h-4.98zM150 242a22 22 0 1 0 0-44 22 22 0 0 0 0 44zm24-22a24 24 0 1 1-48 0 24 24 0 0 1 48 0zm-28.38 17.73l2.04-.87a6 6 0 0 1 4.68 0l2.04.87a2 2 0 0 0 2.5-.82l1.14-1.9a6 6 0 0 1 3.79-2.75l2.15-.5a2 2 0 0 0 1.54-2.12l-.19-2.2a6 6 0 0 1 1.45-4.46l1.45-1.67a2 2 0 0 0 0-2.62l-1.45-1.67a6 6 0 0 1-1.45-4.46l.2-2.2a2 2 0 0 0-1.55-2.13l-2.15-.5a6 6 0 0 1-3.8-2.75l-1.13-1.9a2 2 0 0 0-2.5-.8l-2.04.86a6 6 0 0 1-4.68 0l-2.04-.87a2 2 0 0 0-2.5.82l-1.14 1.9a6 6 0 0 1-3.79 2.75l-2.15.5a2 2 0 0 0-1.54 2.12l.19 2.2a6 6 0 0 1-1.45 4.46l-1.45 1.67a2 2 0 0 0 0 2.62l1.45 1.67a6 6 0 0 1 1.45 4.46l-.2 2.2a2 2 0 0 0 1.55 2.13l2.15.5a6 6 0 0 1 3.8 2.75l1.13 1.9a2 2 0 0 0 2.5.8zm2.82.97a4 4 0 0 1 3.12 0l2.04.87a4 4 0 0 0 4.99-1.62l1.14-1.9a4 4 0 0 1 2.53-1.84l2.15-.5a4 4 0 0 0 3.09-4.24l-.2-2.2a4 4 0 0 1 .97-2.98l1.45-1.67a4 4 0 0 0 0-5.24l-1.45-1.67a4 4 0 0 1-.97-2.97l.2-2.2a4 4 0 0 0-3.09-4.25l-2.15-.5a4 4 0 0 1-2.53-1.84l-1.14-1.9a4 4 0 0 0-5-1.62l-2.03.87a4 4 0 0 1-3.12 0l-2.04-.87a4 4 0 0 0-4.99 1.62l-1.14 1.9a4 4 0 0 1-2.53 1.84l-2.15.5a4 4 0 0 0-3.09 4.24l.2 2.2a4 4 0 0 1-.97 2.98l-1.45 1.67a4 4 0 0 0 0 5.24l1.45 1.67a4 4 0 0 1 .97 2.97l-.2 2.2a4 4 0 0 0 3.09 4.25l2.15.5a4 4 0 0 1 2.53 1.84l1.14 1.9a4 4 0 0 0 5 1.62l2.03-.87zM152 207a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm6 2a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm-11 1a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm-6 0a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm3-5a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm-8 8a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm3 6a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm0 6a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm4 7a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm5-2a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm5 4a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm4-6a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm6-4a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm-4-3a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm4-3a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm-5-4a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm-24 6a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm16 5a5 5 0 1 0 0-10 5 5 0 0 0 0 10zm7-5a7 7 0 1 1-14 0 7 7 0 0 1 14 0zm86-29a1 1 0 0 0 0 2h2a1 1 0 0 0 0-2h-2zm19 9a1 1 0 0 1 1-1h2a1 1 0 0 1 0 2h-2a1 1 0 0 1-1-1zm-14 5a1 1 0 0 0 0 2h2a1 1 0 0 0 0-2h-2zm-25 1a1 1 0 0 0 0 2h2a1 1 0 0 0 0-2h-2zm5 4a1 1 0 0 0 0 2h2a1 1 0 0 0 0-2h-2zm9 0a1 1 0 0 1 1-1h2a1 1 0 0 1 0 2h-2a1 1 0 0 1-1-1zm15 1a1 1 0 0 1 1-1h2a1 1 0 0 1 0 2h-2a1 1 0 0 1-1-1zm12-2a1 1 0 0 0 0 2h2a1 1 0 0 0 0-2h-2zm-11-14a1 1 0 0 1 1-1h2a1 1 0 0 1 0 2h-2a1 1 0 0 1-1-1zm-19 0a1 1 0 0 0 0 2h2a1 1 0 0 0 0-2h-2zm6 5a1 1 0 0 1 1-1h2a1 1 0 0 1 0 2h-2a1 1 0 0 1-1-1zm-25 15c0-.47.01-.94.03-1.4a5 5 0 0 1-1.7-8 3.99 3.99 0 0 1 1.88-5.18 5 5 0 0 1 3.4-6.22 3 3 0 0 1 1.46-1.05 5 5 0 0 1 7.76-3.27A30.86 30.86 0 0 1 246 184c6.79 0 13.06 2.18 18.17 5.88a5 5 0 0 1 7.76 3.27 3 3 0 0 1 1.47 1.05 5 5 0 0 1 3.4 6.22 4 4 0 0 1 1.87 5.18 4.98 4.98 0 0 1-1.7 8c.02.46.03.93.03 1.4v1h-62v-1zm.83-7.17a30.9 30.9 0 0 0-.62 3.57 3 3 0 0 1-.61-4.2c.37.28.78.49 1.23.63zm1.49-4.61c-.36.87-.68 1.76-.96 2.68a2 2 0 0 1-.21-3.71c.33.4.73.75 1.17 1.03zm2.32-4.54c-.54.86-1.03 1.76-1.49 2.68a3 3 0 0 1-.07-4.67 3 3 0 0 0 1.56 1.99zm1.14-1.7c.35-.5.72-.98 1.1-1.46a1 1 0 1 0-1.1 1.45zm5.34-5.77c-1.03.86-2 1.79-2.9 2.77a3 3 0 0 0-1.11-.77 3 3 0 0 1 4-2zm42.66 2.77c-.9-.98-1.87-1.9-2.9-2.77a3 3 0 0 1 4.01 2 3 3 0 0 0-1.1.77zm1.34 1.54c.38.48.75.96 1.1 1.45a1 1 0 1 0-1.1-1.45zm3.73 5.84c-.46-.92-.95-1.82-1.5-2.68a3 3 0 0 0 1.57-1.99 3 3 0 0 1-.07 4.67zm1.8 4.53c-.29-.9-.6-1.8-.97-2.67.44-.28.84-.63 1.17-1.03a2 2 0 0 1-.2 3.7zm1.14 5.51c-.14-1.21-.35-2.4-.62-3.57.45-.14.86-.35 1.23-.63a2.99 2.99 0 0 1-.6 4.2zM275 214a29 29 0 0 0-57.97 0h57.96zM72.33 198.12c-.21-.32-.34-.7-.34-1.12v-12h-2v12a4.01 4.01 0 0 0 7.09 2.54c.57-.69.91-1.57.91-2.54v-12h-2v12a1.99 1.99 0 0 1-2 2 2 2 0 0 1-1.66-.88zM75 176c.38 0 .74-.04 1.1-.12a4 4 0 0 0 6.19 2.4A13.94 13.94 0 0 1 84 185v24a6 6 0 0 1-6 6h-3v9a5 5 0 1 1-10 0v-9h-3a6 6 0 0 1-6-6v-24a14 14 0 0 1 14-14 5 5 0 0 0 5 5zm-17 15v12a1.99 1.99 0 0 0 1.22 1.84 2 2 0 0 0 2.44-.72c.21-.32.34-.7.34-1.12v-12h2v12a3.98 3.98 0 0 1-5.35 3.77 3.98 3.98 0 0 1-.65-.3V209a4 4 0 0 0 4 4h16a4 4 0 0 0 4-4v-24c.01-1.53-.23-2.88-.72-4.17-.43.1-.87.16-1.28.17a6 6 0 0 1-5.2-3 7 7 0 0 1-6.47-4.88A12 12 0 0 0 58 185v6zm9 24v9a3 3 0 1 0 6 0v-9h-6z'/%3E%3Cpath d='M-17 191a1 1 0 0 0 0 2h2a1 1 0 0 0 0-2h-2zm19 9a1 1 0 0 1 1-1h2a1 1 0 0 1 0 2H3a1 1 0 0 1-1-1zm-14 5a1 1 0 0 0 0 2h2a1 1 0 0 0 0-2h-2zm-25 1a1 1 0 0 0 0 2h2a1 1 0 0 0 0-2h-2zm5 4a1 1 0 0 0 0 2h2a1 1 0 0 0 0-2h-2zm9 0a1 1 0 0 1 1-1h2a1 1 0 0 1 0 2h-2a1 1 0 0 1-1-1zm15 1a1 1 0 0 1 1-1h2a1 1 0 0 1 0 2h-2a1 1 0 0 1-1-1zm12-2a1 1 0 0 0 0 2h2a1 1 0 0 0 0-2H4zm-11-14a1 1 0 0 1 1-1h2a1 1 0 0 1 0 2h-2a1 1 0 0 1-1-1zm-19 0a1 1 0 0 0 0 2h2a1 1 0 0 0 0-2h-2zm6 5a1 1 0 0 1 1-1h2a1 1 0 0 1 0 2h-2a1 1 0 0 1-1-1zm-25 15c0-.47.01-.94.03-1.4a5 5 0 0 1-1.7-8 3.99 3.99 0 0 1 1.88-5.18 5 5 0 0 1 3.4-6.22 3 3 0 0 1 1.46-1.05 5 5 0 0 1 7.76-3.27A30.86 30.86 0 0 1-14 184c6.79 0 13.06 2.18 18.17 5.88a5 5 0 0 1 7.76 3.27 3 3 0 0 1 1.47 1.05 5 5 0 0 1 3.4 6.22 4 4 0 0 1 1.87 5.18 4.98 4.98 0 0 1-1.7 8c.02.46.03.93.03 1.4v1h-62v-1zm.83-7.17a30.9 30.9 0 0 0-.62 3.57 3 3 0 0 1-.61-4.2c.37.28.78.49 1.23.63zm1.49-4.61c-.36.87-.68 1.76-.96 2.68a2 2 0 0 1-.21-3.71c.33.4.73.75 1.17 1.03zm2.32-4.54c-.54.86-1.03 1.76-1.49 2.68a3 3 0 0 1-.07-4.67 3 3 0 0 0 1.56 1.99zm1.14-1.7c.35-.5.72-.98 1.1-1.46a1 1 0 1 0-1.1 1.45zm5.34-5.77c-1.03.86-2 1.79-2.9 2.77a3 3 0 0 0-1.11-.77 3 3 0 0 1 4-2zm42.66 2.77c-.9-.98-1.87-1.9-2.9-2.77a3 3 0 0 1 4.01 2 3 3 0 0 0-1.1.77zm1.34 1.54c.38.48.75.96 1.1 1.45a1 1 0 1 0-1.1-1.45zm3.73 5.84c-.46-.92-.95-1.82-1.5-2.68a3 3 0 0 0 1.57-1.99 3 3 0 0 1-.07 4.67zm1.8 4.53c-.29-.9-.6-1.8-.97-2.67.44-.28.84-.63 1.17-1.03a2 2 0 0 1-.2 3.7zm1.14 5.51c-.14-1.21-.35-2.4-.62-3.57.45-.14.86-.35 1.23-.63a2.99 2.99 0 0 1-.6 4.2zM15 214a29 29 0 0 0-57.97 0h57.96z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
+
+      .select-none {
+        background-color: $table-dark-stripe !important;
+      }
+
+      h4 {
+        background-color: $table-dark-stripe !important;
+        color: $theme-dark-heading-color;
+      }
+
+      .msg {
+        background-color: $theme-dark-bg !important;
+        border-color: $grey-light !important;
+      }
+
+      &.chat-content-area {
+        .chat-content-scroll-area {
+          background: rgba($black, 0.2);
+        }
+
+        .chat__log {
+          .msg-time {
+            .vs-divider--text {
+              background: $theme-dark-bg !important;
+              border-color: $grey-light !important;
+            }
+          }
+        }
+      }
+
+      .chat__input {
+        input {
+          border-color: $theme-dark-border-color !important;
+        }
+      }
+    }
+  }
+
+  // ToDo
+  #todo-app {
+    .todo-list {
+      h6 {
+        &.todo-title {
+          color: $theme-dark-heading-color;
+        }
+      }
+
+      .todo-tags {
+        .con-vs-chip {
+          background: $dark-card-color;
+          color: $theme-dark-text-color !important;
+        }
+      }
+    }
+
+    .list-item-component {
+      border-color: $theme-dark-border-color;
+
+      &:hover {
+        box-shadow: 0px 0 0 0px $dark;
+      }
+    }
+  }
+
+  // Email
+  #email-app {
+    .email__mails {
+      .email__mail-item {
+        .mail__mail-item {
+
+          background: $theme-dark-bg;
+
+          &:hover {
+            box-shadow: 10px 0 0 0px $dark;
+          }
+
+          &.mail__opened-mail {
+            background: $theme-light-dark-bg;
+          }
+        }
+
+        &:not(:first-of-type) {
+          .mail__mail-item {
+            border-top: 1px solid #414561;
+          }
+        }
+      }
+    }
+
+    .email-view-sidebar {
+      .vs-sidebar {
+        background-color: $table-dark-stripe !important;
+        border-left-color: #414561;
+      }
+
+      .email-header {
+        border-bottom-color: #414561;
+      }
+    }
+  }
+
+  // Calendar
+  #calendar-app {
+    .full-calendar-body {
+      .week-row {
+        .day-cell.not-cur-month {
+          .day-number {
+            color: rgba(255, 255, 255, 0.24);
+          }
+        }
+      }
+    }
+  }
+
+  // Alert
+  .vs-alert {
+    code {
+      color: $grey;
+      background: $content-dark-bg;
+    }
+  }
+
+  // Avatar
+  .con-vs-avatar {
+    background: $theme-dark-bg !important;
+
+    // avatar color
+    &.con-vs-avatar-primary {
+      background: rgba(var(--vs-primary), 1) !important;
+    }
+
+    &.con-vs-avatar-success {
+      background: rgba(var(--vs-success), 1) !important;
+    }
+
+    &.con-vs-avatar-danger {
+      background: rgba(var(--vs-danger), 1) !important;
+    }
+
+    &.con-vs-avatar-warning {
+      background: rgba(var(--vs-warning), 1) !important;
+    }
+
+    &.con-vs-avatar-info {
+      background: rgba(var(--vs-info), 1) !important;
+    }
+
+    &.con-vs-avatar-dark {
+      background: rgba($grey, 1) !important;
+    }
+  }
+
+  // Profile
+  #profile-page {
+    .profile-header {
+      .profile-header-nav {
+        background: $dark-card-color !important;
+      }
+    }
+  }
+
+  // FAQ
+  #faq-page {
+    .faq-bg {
+      background-color: $dark-card-color;
+    }
+  }
+
+
+  // breadcrumb
+  .vs-breadcrumb--ol {
+
+    a,
+    .vs-breadcrum--separator {
+      color: $grey-light;
+    }
+  }
+
+  // Button
+  // .vs-button-dark {
+  //   &.vs-button-filled {
+  //     background: $grey !important;
+
+  //     .vs-button--text {
+  //       color: $dark;
+  //     }
+  //   }
+  // }
+
+  // .demo-text-dark {
+  //   .vs-button-text {
+  //     color: $grey;
+  //   }
+  // }
+
+  // .vs-button-dark {
+
+  //   &.vs-button-border,
+  //   &.vs-button-flat,
+  //   &.vs-button-line {
+  //     border-color: $grey;
+  //   }
+
+  //   .vs-button--text,
+  //   .vs-icon {
+  //     color: $grey;
+  //   }
+  // }
+
+  // Chip
+  .con-vs-chip {
+    background: $theme-dark-bg;
+    color: $theme-dark-text-color !important;
+
+    // CHIP COLOR
+    &.vs-chip-primary {
+      background: rgba(var(--vs-primary), 1);
+    }
+
+    &.vs-chip-success {
+      background: rgba(var(--vs-success), 1);
+    }
+
+    &.vs-chip-danger {
+      background: rgba(var(--vs-danger), 1);
+    }
+
+    &.vs-chip-warning {
+      background: rgba(var(--vs-warning), 1);
+    }
+
+    &.vs-chip-info {
+      background: rgba(var(--vs-info), 1);
+    }
+
+    &.vs-chip-dark {
+      background: rgba(var(--vs-dark), 1);
+    }
+
+    .con-vs-avatar {
+      background-color: $theme-light-dark-bg !important;
+    }
+
+    // white text color for colored chips
+    &.con-color {
+      color: $white !important;
+    }
+  }
+
+  .con-chips {
+    .con-chips--input {
+      background-color: $theme-light-dark-bg;
+    }
+  }
+
+  // Divider
+  .vs-divider {
+    .vs-divider-border {
+      border-color: $theme-dark-border-color !important;
+
+      &.vs-divider-border-primary {
+        border-color: rgba(var(--vs-primary), 1) !important;
+      }
+
+      &.vs-divider-border-success {
+        border-color: rgba(var(--vs-success), 1) !important;
+      }
+
+      &.vs-divider-border-danger {
+        border-color: rgba(var(--vs-danger), 1) !important;
+      }
+
+      &.vs-divider-border-warning {
+        border-color: rgba(var(--vs-warning), 1) !important;
+      }
+
+      &.vs-divider-border-info {
+        border-color: rgba(var(--vs-info), 1) !important;
+      }
+
+      &.vs-divider-border-dark {
+        border-color: rgba($grey, 0.5) !important;
+      }
+    }
+
+    .vs-divider--text {
+      // background: transparent;
+      // color: $theme-dark-text-color !important;
+
+      .vs-icon {
+        // color: $theme-dark-text-color;
+      }
+    }
+  }
+
+  // Dropdown
+  .vs-dropdown--menu,
+  .vs-dropdown--menu--after {
+    background: $content-dark-bg;
+    border-color: $theme-dark-border-color;
+
+    .con-dropdown--group-ul {
+      background: $content-dark-bg;
+    }
+
+    .vs-dropdown--item {
+      .vs-dropdown--item-link.disabled {
+        color: $grey !important;
+      }
+    }
+  }
+
+  // Loading
+  .con-vs-loading {
+    background: rgba($dark-card-color, .6);
+
+    h4.title-loading {
+      color: $theme-dark-text-color;
+    }
+  }
+
+  // List
+  .vs-list {
+    .vs-list--header {
+      box-shadow: 0 7px 7px -5px rgba($theme-dark-shadow-color, 1);
+    }
+
+    .vs-list--item {
+      border-color: rgba($theme-dark-text-color, .08);
+    }
+  }
+
+  // Navbar
+  .vs-navbar {
+    border-color: $content-dark-bg;
+
+    li {
+      &.vs-navbar--item {
+        a {
+          color: $grey-light;
+        }
+
+        &.is-active-item {
+          a {
+            color: $white;
+          }
+        }
+      }
+    }
+  }
+
+  .vs-navbar {
+    &.vs-navbar-color-transparent:not(.vs-navbar-flat) {
+      background-color: $theme-dark-bg !important;
+      box-shadow: 0 4px 20px 0 rgba(0, 0, 0, .5);
+    }
+  }
+
+  // Pagination
+  .vs-pagination--nav {
+    .vs-pagination--ul {
+      background: $theme-dark-bg;
+
+      .vs-pagination--li {
+        color: $theme-dark-text-color;
+      }
+
+      .item-pagination {
+        &.is-current {
+          color: $white;
+        }
+      }
+    }
+
+    .vs-pagination--buttons {
+      background: $theme-dark-bg;
+      color: $theme-dark-text-color;
+    }
+  }
+
+  // Popup
+  .con-vs-popup {
+    .vs-popup {
+      background: $content-dark-bg !important;
+      color: $theme-dark-text-color;
+
+      .vs-popup--header {
+        background: $dark-card-color !important;
+
+        .vs-popup--close {
+          background: $content-dark-bg !important;
+          color: $theme-dark-text-color;
+        }
+      }
+    }
+  }
+
+  #popup-demo {
+    .demo-alignment {
+      .vs-button {
+        background: $content-dark-bg !important;
+
+        &:hover {
+          box-shadow: $content-dark-bg 0px 8px 25px -8px !important;
+        }
+      }
+    }
+  }
+
+  // Sidebar component
+  .vs-sidebar {
+    background: $sidebar-dark-bg;
+
+    h4,
+    h5 {
+      color: $theme-dark-heading-color;
+    }
+
+    .vs-sidebar--header {
+      border-bottom-color: $theme-dark-border-color;
+    }
+
+    .vs-sidebar--items {
+      .vs-sidebar--item {
+        a {
+          color: $theme-dark-text-color;
+        }
+      }
+    }
+
+    .vs-sidebar-group {
+      &.vs-sidebar-group-active {
+        >.group-header {
+          background: $content-dark-bg;
+        }
+      }
+    }
+  }
+
+  // Slider
+  .con-vs-slider {
+    .vs-slider {
+      background: rgba($content-dark-bg, 0.5);
+    }
+  }
+
+  // Tabs
+  .ul-tabs {
+    .vs-tabs--li {
+      button {
+        color: $theme-dark-text-color;
+      }
+    }
+  }
+
+  .vs-tabs-dark {
+
+    .activeChild button,
+    button:not(:disabled):hover {
+      color: $grey !important;
+    }
+
+    .line-vs-tabs {
+      background: linear-gradient(30deg, rgba($grey, 1), rgba($grey, .5)) !important;
+      box-shadow: 0 0 8px 0 rgba($grey, .4) !important;
+    }
+  }
+
+  // Tooltip
+  .vs-tooltip {
+    &.vs-tooltip-dark {
+      background: $content-dark-bg;
+    }
+  }
+
+  // Upload
+  .con-upload {
+
+    .con-input-upload,
+    .con-img-upload {
+      background-color: $content-dark-bg;
+    }
+
+    .btn-upload-all {
+      background-color: $sidebar-dark-bg;
+    }
+
+    .con-input-upload {
+      border-color: $theme-dark-border-color;
+    }
+  }
+
+
+  // Form Fields
+  input {
+    background: $theme-dark-bg;
+    color: $theme-dark-text-color;
+
+    ~.vs-placeholder-label,
+    ~.vs-input--placeholder {
+      color: $theme-dark-text-color;
+    }
+  }
+
+  ::placeholder {
+    color: $theme-dark-text-color !important;
+  }
+
+  .vs-input--icon {
+    color: $theme-dark-text-color;
+    border-right-color: rgba($theme-dark-text-color, .2);
+
+    &.icon-after {
+      border-left-color: rgba($theme-dark-text-color, .2);
+    }
+  }
+
+  .vs-input-number {
+    background: $content-dark-bg;
+
+    button {
+
+      &.vs-input-number--button-less,
+      &.vs-input-number--button-plus {
+
+        &:disabled,
+        &.limit {
+          opacity: 0.75;
+          background: $grey;
+        }
+      }
+    }
+  }
+
+  .vs-con-textarea {
+    background: $content-dark-bg;
+    color: $theme-dark-text-color;
+
+    .vs-textarea {
+      color: $theme-dark-text-color;
+
+      &:focus {
+        border-color: transparent;
+      }
+    }
+
+    &.focusx {
+      border-color: transparent;
+
+      h4 {
+        background: transparent;
+      }
+    }
+
+    &.textarea-danger {
+      .vs-textarea {
+        color: rgba(var(--vs-danger), 1);
+      }
+    }
+  }
+
+  .vs-switch {
+    background: $content-dark-bg;
+
+    &.vs-switch-primary {
+      &.vs-switch-active {
+        background: rgba(var(--vs-primary), 1);
+      }
+    }
+
+    &.vs-switch-success {
+      &.vs-switch-active {
+        background: rgba(var(--vs-success), 1);
+      }
+    }
+
+    &.vs-switch-danger {
+      &.vs-switch-active {
+        background: rgba(var(--vs-danger), 1);
+      }
+    }
+
+    &.vs-switch-warning {
+      &.vs-switch-active {
+        background: rgba(var(--vs-warning), 1);
+      }
+    }
+
+    &.vs-switch-info {
+      &.vs-switch-active {
+        background: rgba(var(--vs-info), 1);
+      }
+    }
+
+    &.vs-switch-dark {
+      &.vs-switch-active {
+        background: $grey;
+      }
+    }
+  }
+
+  .vs-radio-dark {
+    .vs-radio--circle {
+      background: $grey;
+      box-shadow: 0 3px 12px 0 rgba($grey, .4);
+    }
+  }
+
+  .op-block {
+    box-shadow: 1px 1px 10px rgba($white, .1)
+  }
+
+  .vs-input-dark {
+    .vs-input--input {
+      &:focus {
+        border-color: $grey !important;
+
+        ~.vs-input--placeholder {
+          color: $grey;
+        }
+      }
+    }
+  }
+
+  .vue-form-wizard {
+    .wizard-icon-circle {
+      background: $table-light-stripe;
+      border-color: $table-dark-stripe
+    }
+
+    .wizard-nav-pills {
+      &>li {
+        &>a {
+          color: $white;
+
+          .stepTitle {
+            color: $grey-light;
+          }
+
+          &:hover {
+            color: $white;
+          }
+        }
+      }
+    }
+
+    .wizard-navigation {
+      .wizard-nav {
+        .stepTitle {
+          color: $grey-light;
+        }
+      }
+    }
+  }
+
+  // Tables
+  .vs-con-table {
+    .vs-con-tbody {
+      background: $table-dark-stripe;
+      border: 2px solid $content-dark-bg;
+
+      .vs-table--tbody-table {
+        tr {
+          background: $table-light-stripe;
+        }
+
+        .vs-table--thead {
+          tr {
+            background: $table-dark-stripe;
+          }
+
+          // .con-td-check{
+          //     background: $table-dark-stripe;
+          // }
+        }
+      }
+    }
+
+    .con-edit-td {
+      background: $table-dark-stripe;
+    }
+
+    .is-selected {
+      .tr-values {
+        background: $table-dark-stripe !important;
+      }
+    }
+  }
+
+  // Charts : Apex Chart
+  .apexcharts-canvas {
+    .apexcharts-tooltip {
+      &.light {
+        background: $table-dark-stripe;
+        border-color: $table-light-stripe;
+
+        .apexcharts-tooltip-title {
+          background: $table-dark-stripe;
+        }
+      }
+    }
+
+    .apexcharts-xaxistooltip {
+      background: $table-dark-stripe;
+      border-color: $table-light-stripe;
+      color: $white;
+
+      &:before,
+      &:after {
+        border-bottom-color: $table-dark-stripe;
+      }
+    }
+
+    .apexcharts-yaxistooltip {
+      background: $table-dark-stripe;
+      border-color: $table-light-stripe;
+      color: $white;
+
+      &:before,
+      &:after {
+        border-left-color: $table-dark-stripe;
+      }
+    }
+
+    text {
+      fill: $white !important;
+    }
+
+    .apexcharts-pie-series {
+      path {
+        stroke: $table-light-stripe;
+      }
+    }
+
+    .apexcharts-legend {
+      .apexcharts-legend-series {
+        .apexcharts-legend-text {
+          color: $grey !important;
+        }
+      }
+    }
+
+    .apexcharts-toolbar {
+      .apexcharts-menu {
+        background: $table-light-stripe;
+        border-color: $table-light-stripe;
+
+        .apexcharts-menu-item {
+          background: $table-dark-stripe;
+        }
+      }
+    }
+
+    .apexcharts-radar-series {
+      polygon {
+        fill: $content-dark-bg;
+        stroke: $table-dark-stripe;
+      }
+    }
+
+    .apexcharts-track {
+      path {
+        stroke: $table-light-stripe;
+      }
+    }
+
+    .apexcharts-selection-icon:not(.selected):hover svg,
+    .apexcharts-zoom-icon:not(.selected):hover svg,
+    .apexcharts-zoom-in-icon:hover svg,
+    .apexcharts-zoom-out-icon:hover svg,
+    .apexcharts-reset-zoom-icon:hover svg,
+    .apexcharts-menu-icon:hover svg {
+      fill: $white;
+    }
+
+    // grid color
+    .apexcharts-gridline {
+      stroke: $theme-dark-border-color;
+    }
+  }
+
+  // Colors
+  .token.operator,
+  .token.entity,
+  .token.url,
+  .language-css .token.string,
+  .style .token.string {
+    background: transparent;
+  }
+
+  // Seach
+  .search-tab-filter {
+    background: $dark-card-color;
+  }
+
+  // Select
+  .vs-select--options {
+    background: $dark-card-color;
+    border-color: rgba($grey, 0.2);
+
+    span {
+      color: $theme-dark-text-color;
+    }
+
+    .vs-select--item {
+      color: $grey;
+      border-color: rgba($grey, 0.2);
+      box-shadow: none;
+
+      &:hover {
+        background: $content-dark-bg;
+        // color: $grey;
+      }
+    }
+  }
+
+  // Quill editor
+  .quill-editor {
+    .ql-toolbar {
+      button {
+        color: $white;
+
+        svg {
+          path {
+            stroke: $white;
+          }
+        }
+      }
+
+      .ql-fill {
+        fill: $white;
+      }
+
+      .ql-stroke {
+        stroke: $white;
+      }
+
+      .ql-picker {
+        color: $white;
+
+        .ql-picker-options {
+          background: $dark-card-color;
+        }
+      }
+    }
+
+    .ql-editor {
+      &.ql-blank {
+        &::before {
+          color: rgba($white, .6);
+        }
+      }
+    }
+  }
+
+  .activity-timeline {
+    border-color: $theme-dark-border-color;
+  }
+
+  // Datepicker
+  .vdp-datepicker {
+    .vdp-datepicker__calendar {
+      background: $content-dark-bg;
+      border-color: $theme-dark-border-color;
+
+      header {
+
+        .prev,
+        .next,
+        .up {
+          &:not(.disabled) {
+            &:hover {
+              background: $dark-card-color;
+            }
+          }
+        }
+      }
+      .disabled {
+        color: rgba($grey, .6);
+      }
+
+      .cell {
+        .highlighted {
+          background: $dark-card-color;
+        }
+
+        &:hover {
+          background-color: $theme-dark-bg;
+        }
+      }
+    }
+
+    input {
+      border: 0;
+      padding: 10px;
+    }
+  }
+
+  // Collapse
+  .vs-collapse {
+    &.shadow {
+      box-shadow: 0 0px 10px 1px rgba($theme-dark-shadow-color, 1) !important;
+    }
+
+    .vs-collapse-item {
+      border-bottom-color: rgba($white, .04);
+    }
+
+    &.border {
+      border-color: rgba($white, .1);
+
+      .vs-collapse-item {
+        border-bottom-color: rgba($white, .04);
+      }
+    }
+
+    &.margin {
+      .vs-collapse-item {
+        box-shadow: 0 2px 10px 0 rgba($theme-dark-shadow-color, 1)
+      }
+    }
+  }
+
+  // vx-auto-suggest
+  .vx-auto-suggest {
+    .auto-suggest-suggestions-list {
+      background-color: $content-dark-bg !important;
+    }
+  }
+
+  // footer layouts
+  .footer-sticky {
+    .the-footer {
+      background-color: $dark-card-color;
+      color: $white !important;
+    }
+  }
+
+  // Dialogs - This dialog need a dark layout claas
+  .con-vs-dialog {
+    .vs-dialog {
+      background: $content-dark-bg;
+      color: $white;
+
+      header {
+        background: $dark-card-color;
+
+        .con-title-after {
+          h3 {
+            color: $white;
+          }
+        }
+
+        .vs-dialog-cancel,
+        .vs-icon {
+          background: $content-dark-bg;
+          color: $white;
+        }
+      }
+
+      footer {
+        .vs-button--text {
+          color: $white;
+        }
+      }
+
+      .vs-dialog-text {
+        .date-label {
+          color: $white;
+        }
+      }
+
+      input,
+      .vs-con-textarea {
+        background: $dark-card-color;
+      }
+
+      .con-upload {
+
+        .con-input-upload,
+        .con-img-upload {
+          background: $dark-card-color;
+        }
+      }
+
+      .quill-editor {
+        background: $table-light-stripe;
+      }
+    }
+  }
+
+  .tree-container {
+    border-color: $theme-dark-border-color;
+
+    .tag,
+    .search-input {
+      border-color: $theme-dark-border-color;
+    }
+  }
+
+  .halo-tree {
+    .node-title {
+      &:hover {
+        background-color: $theme-light-dark-bg;
+      }
+    }
+  }
+
+  // Customizer
+  #theme-customizer {
+    input {
+      background: $theme-light-dark-bg;
+    }
+  }
+
+  .add-new-data-sidebar {
+    input {
+      background: $theme-light-dark-bg;
+    }
+  }
+
+
+  // //////////////////////////////////////////////////////////////////////////////////////////////
+  // STYLE IF COMPONENT IS INSIDE CARD (Any wrapper which have dark $theme-dark background color)
+  // //////////////////////////////////////////////////////////////////////////////////////////////
+
+  .vx-card {
+
+    // PAGINATION
+    .vs-pagination--nav {
+      .vs-pagination--ul {
+        background: $theme-light-dark-bg;
+
+        .vs-pagination--li {
+          color: $white;
+        }
+      }
+
+      .vs-pagination--buttons {
+        background: $theme-light-dark-bg;
+        color: $white;
+      }
+    }
+
+    // AVATAR
+    .con-vs-avatar {
+      background: $theme-light-dark-bg !important;
+
+      // avatar color
+      &.con-vs-avatar-primary {
+        background: rgba(var(--vs-primary), 1) !important;
+      }
+
+      &.con-vs-avatar-success {
+        background: rgba(var(--vs-success), 1) !important;
+      }
+
+      &.con-vs-avatar-danger {
+        background: rgba(var(--vs-danger), 1) !important;
+      }
+
+      &.con-vs-avatar-warning {
+        background: rgba(var(--vs-warning), 1) !important;
+      }
+
+      &.con-vs-avatar-info {
+        background: rgba(var(--vs-info), 1) !important;
+      }
+
+      &.con-vs-avatar-dark {
+        background: rgba($grey, 1) !important;
+      }
+    }
+
+    // CHIP
+    .con-vs-chip {
+      background: $theme-light-dark-bg;
+
+      // CHIP COLOR
+      &.vs-chip-primary {
+        background: rgba(var(--vs-primary), 1);
+      }
+
+      &.vs-chip-success {
+        background: rgba(var(--vs-success), 1);
+      }
+
+      &.vs-chip-danger {
+        background: rgba(var(--vs-danger), 1);
+      }
+
+      &.vs-chip-warning {
+        background: rgba(var(--vs-warning), 1);
+      }
+
+      &.vs-chip-info {
+        background: rgba(var(--vs-info), 1);
+      }
+
+      &.vs-chip-dark {
+        background: rgba(var(--vs-dark), 1);
+      }
+
+      .con-vs-avatar {
+        background-color: $theme-dark-bg !important;
+      }
+    }
+
+    .con-chips {
+      .con-chips--input {
+        background-color: $theme-dark-bg !important;
+      }
+    }
+
+    // NAVBAR
+    .vs-navbar {
+      &.vs-navbar-color-transparent {
+        background-color: $theme-light-dark-bg !important;
+      }
+
+      .vs-navbar--btn-responsive {
+        .btn-responsive-line {
+          background: $theme-dark-text-color;
+        }
+      }
+    }
+
+    .vs-navbar-border
+    {
+      border-color: $theme-dark-border-color;
+
+      .vs-navbar--item {
+        border-color: $theme-dark-border-color;
+      }
+    }
+
+    .vs-navbar-shadow {
+      .vs-navbar--item {
+        &.is-active-item {
+          background-color: $theme-dark-bg;
+        }
+      }
+    }
+
+    // INPUT
+    input {
+      background: $theme-light-dark-bg;
+    }
+  }
+}
+
+
+// RTL Fixes for dark mode
+/*! rtl:begin:ignore */
+.theme-dark {
+  .vdp-datepicker {
+    .vdp-datepicker__calendar {
+      header {
+        .prev {
+          &:after {
+            border-right-color: $white;
+          }
+        }
+
+        .next {
+          &:after {
+            border-left-color: $white;
+          }
+        }
+      }
+    }
+  }
+}
+/*! rtl:end:ignore */
diff --git a/src/assets/scss/vuexy/themes/_themeSemiDark.scss b/src/assets/scss/vuexy/themes/_themeSemiDark.scss
new file mode 100644
index 0000000..753792f
--- /dev/null
+++ b/src/assets/scss/vuexy/themes/_themeSemiDark.scss
@@ -0,0 +1,50 @@
+/*=========================================================================================
+    File Name: _themeSemiDark.scss
+    Description: partial- Styles for semi dark theme
+    ----------------------------------------------------------------------------------------
+    Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template
+      Author: Pixinvent
+    Author URL: http://www.themeforest.net/user/pixinvent
+==========================================================================================*/
+
+
+.theme-semi-dark {
+
+    // Vertical NavMenu
+    .v-nav-menu{
+        .vs-sidebar {
+            background-color: $sidebar-dark-bg;
+        }
+        .shadow-bottom{
+            width: 94%;
+            background: linear-gradient(to bottom, rgb(15, 22, 66) 44%, rgba(15, 22, 66, 0.51) 73%, rgba(44, 48, 60, 0) 100%)
+        }
+        .scroll-area-v-nav-menu{
+            .feather-icon, span{
+                color: $white;
+            }
+            a{
+                .feather-icon{
+                    svg, span{
+                        color: $white;
+                    }
+                }
+            }
+            .vs-sidebar-group{
+                &.vs-sidebar-group-open{
+                    > .group-header{
+                        background: $content-dark-bg;
+                    }
+                }
+                &.vs-sidebar-group-active{
+                    > .group-header{
+                        background: $content-dark-bg;
+                    }
+                }
+            }
+            .con-vs-chip{
+                box-shadow: 0px 0px 4px 2px $content-dark-bg;
+            }
+        }
+    }
+}
diff --git a/src/assets/utils/color.js b/src/assets/utils/color.js
new file mode 100644
index 0000000..b906866
--- /dev/null
+++ b/src/assets/utils/color.js
@@ -0,0 +1,132 @@
+export default {
+  darken(color, percent) {
+    var f=color.split(","),t=percent<0?0:255,p=percent<0?percent*-1:percent,R=parseInt(f[0].slice(4)),G=parseInt(f[1]),B=parseInt(f[2]);
+    return "rgb("+(Math.round((t-R)*p)+R)+","+(Math.round((t-G)*p)+G)+","+(Math.round((t-B)*p)+B)+")";
+  },
+  getColor(colorx, alphax = 1, defaultx = true){
+    // change color hex to RGB
+    if(/^[#]/.test(colorx)){
+      let c = this.hexToRgb(colorx)
+
+      if(alphax == 1){
+        colorx = `rgb(${c.r},${c.g},${c.b})`
+
+      } else {
+        colorx = `rgba(${c.r},${c.g},${c.b},${alphax})`
+
+      }
+    } else if (/^rgba/.test(colorx)) {
+
+      if(colorx.search(/.([0-9]\))$/)==-1 && !defaultx){
+        colorx = colorx.replace(/.?([0-9]\))$/,`${alphax})`)
+      }
+
+
+    } else if (/^(rgb)/.test(colorx)) {
+    // change rgb and rgba
+      if(alphax != 1){
+        colorx = colorx.replace(/^(rgb)/,`rgba`)
+        colorx = colorx.replace(/\)$/,`,${alphax})`)
+      }
+
+    }
+    return colorx
+  },
+  isColor(colorx){
+    let vscolors = ['primary','secondary','success','danger','warning','dark', 'light']
+    return vscolors.includes(colorx)
+  },
+  RandomColor(){
+    function getRandomInt(min, max) {
+      return Math.floor(Math.random() * (max - min)) + min;
+    }
+    return `rgb(${getRandomInt(0,255)},${getRandomInt(0,255)},${getRandomInt(0,255)})`
+  },
+  rColor(colorx,opacity=1){
+    if(/^[#]/.test(colorx)){
+      let c = this.hexToRgb(colorx)
+      colorx = `rgba(${c.r},${c.g},${c.b},${opacity})`
+    } else if (/^[rgb]/.test(colorx)){
+      let colorSplit = colorx.split(')')[0]
+      if(!/^[rgba]/.test(colorx)){
+        colorSplit.replace('rgb','rgba')
+        colorSplit += `,${opacity})`
+      } else {
+        // colorSplit.replace('rgb','rgba')
+        colorSplit += `)`
+      }
+      colorx = colorSplit
+    }
+
+    let vscolors = ['primary','success','danger','warning','dark']
+    if(colorx){
+      if(/[#()]/.test(colorx)){
+        return colorx
+      } else {
+        if(vscolors.includes(colorx)){
+          return `rgba(var(--${colorx}),${opacity})`
+        } else {
+          return `rgba(var(--primary),${opacity})`
+        }
+      }
+    } else {
+      return `rgba(var(--primary),${opacity})`
+    }
+  },
+  contrastColor(elementx) {
+    let c = elementx
+    if(/[#]/g.test(elementx)){
+      let rgbx = this.hexToRgb(elementx)
+      c = `rgb(${rgbx.r},${rgbx.g},${rgbx.b})`
+    }
+    var rgb = c.replace(/^(rgb|rgba)\(/,'').replace(/\)$/,'').replace(/\s/g,'').split(',');
+    var yiq = ((rgb[0]*299)+(rgb[1]*587)+(rgb[2]*114))/1000;
+    if(yiq >= 128){
+      return true
+    } else {
+      return false
+    }
+  },
+  setCssVariable(propertyName, value) {
+    if(typeof window !== 'undefined'){
+      document.documentElement.style.setProperty(propertyName, value);
+    }
+  },
+  hexToRgb(hex) {
+    // Expand shorthand form (e.g. "03F") to full form (e.g. "0033FF")
+    var shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i;
+    hex = hex.replace(shorthandRegex, function(m, r, g, b) {
+      return r + r + g + g + b + b;
+    });
+
+    var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
+    return result ? {
+      r: parseInt(result[1], 16),
+      g: parseInt(result[2], 16),
+      b: parseInt(result[3], 16)
+    } : null;
+  },
+  getVariable(styles, propertyName) {
+    return String(styles.getPropertyValue(propertyName)).trim();
+  },
+  changeColor(colorInicial){
+    let colores = ['primary','success','danger','warning','dark']
+    let colorx
+
+    if(colores.includes(colorInicial)){
+      let style = getComputedStyle(document.documentElement)
+      colorx = this.getVariable(style,'--'+colorInicial)
+    } else {
+      if(/[rgb()]/g.test(colorInicial)){
+        colorx = colorInicial.replace(/[rgb()]/g,'')
+      } else if(/[#]/g.test(colorInicial)){
+        let rgbx = this.hexToRgb(colorInicial)
+        colorx = `${rgbx.r},${rgbx.g},${rgbx.b}`
+      } else {
+        colorx = '--'+colorInicial
+      }
+    }
+    return colorx
+    // this.setCssVariable('--'+clave,colorx)
+  }
+}
diff --git a/src/assets/utils/easing.js b/src/assets/utils/easing.js
new file mode 100644
index 0000000..f9b9f83
--- /dev/null
+++ b/src/assets/utils/easing.js
@@ -0,0 +1,114 @@
+export default {
+  name:'easing',
+  // no easing, no acceleration
+  linear(t, b, c, d) {
+    return c*t/d + b;
+  },
+  // accelerating from zero velocity
+  easeInQuad(t, b, c, d) {
+    t /= d;
+    return c*t*t + b;
+  },
+  // decelerating to zero velocity
+  easeOutQuad(t, b, c, d) {
+    t /= d;
+    return -c * t*(t-2) + b;
+  },
+  // acceleration until halfway, then deceleration
+  easeInOutQuad (t, b, c, d) {
+    t /= d/2;
+    if (t < 1) return c/2*t*t + b;
+    t--;
+    return -c/2 * (t*(t-2) - 1) + b;
+  },
+  // accelerating from zero velocity
+  easeInCubic(t, b, c, d) {
+    t /= d;
+    return c*t*t*t + b;
+  },
+  // decelerating to zero velocity
+  easeOutCubic(t, b, c, d) {
+    t /= d;
+    t--;
+    return c*(t*t*t + 1) + b;
+  },
+  // acceleration until halfway, then deceleration
+  easeInOutCubic(t, b, c, d) {
+    t /= d/2;
+    if (t < 1) return c/2*t*t*t + b;
+    t -= 2;
+    return c/2*(t*t*t + 2) + b;
+  },
+  // accelerating from zero velocity
+  easeInQuart(t, b, c, d) {
+    t /= d;
+    return c*t*t*t*t + b;
+  },
+  // decelerating to zero velocity
+  easeOutQuart(t, b, c, d) {
+    t /= d;
+    t--;
+    return -c * (t*t*t*t - 1) + b;
+  },
+  // acceleration until halfway, then deceleration
+  easeInOutQuart(t, b, c, d) {
+    t /= d/2;
+    if (t < 1) return c/2*t*t*t*t + b;
+    t -= 2;
+    return -c/2 * (t*t*t*t - 2) + b;
+  },
+  // accelerating from zero velocity
+  easeInQuint(t, b, c, d) {
+    t /= d;
+    return c*t*t*t*t*t + b;
+  },
+  // decelerating to zero velocity
+  easeOutQuint(t, b, c, d) {
+    t /= d;
+    t--;
+    return c*(t*t*t*t*t + 1) + b;
+  },
+  // acceleration until halfway, then deceleration
+  easeInOutQuintfunction (t, b, c, d) {
+    t /= d/2;
+    if (t < 1) return c/2*t*t*t*t*t + b;
+    t -= 2;
+    return c/2*(t*t*t*t*t + 2) + b;
+  },
+  easeInSine(t, b, c, d) {
+    return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
+  },
+  easeOutSine(t, b, c, d) {
+    return c * Math.sin(t/d * (Math.PI/2)) + b;
+  },
+  easeInOutSine(t, b, c, d) {
+    return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
+  },
+  easeInExpo(t, b, c, d) {
+    return c * Math.pow( 2, 10 * (t/d - 1) ) + b;
+  },
+  easeOutExpo(t, b, c, d) {
+    return c * ( -Math.pow( 2, -10 * t/d ) + 1 ) + b;
+  },
+  easeInOutExpo(t, b, c, d) {
+    t /= d/2;
+    if (t < 1) return c/2 * Math.pow( 2, 10 * (t - 1) ) + b;
+    t--;
+    return c/2 * ( -Math.pow( 2, -10 * t) + 2 ) + b;
+  },
+  easeInCirc(t, b, c, d) {
+    t /= d;
+    return -c * (Math.sqrt(1 - t*t) - 1) + b;
+  },
+  easeOutCirc(t, b, c, d) {
+    t /= d;
+    t--;
+    return c * Math.sqrt(1 - t*t) + b;
+  },
+  easeInOutCirc(t, b, c, d) {
+    t /= d/2;
+    if (t < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
+    t -= 2;
+    return c/2 * (Math.sqrt(1 - t*t) + 1) + b;
+  }
+}
diff --git a/src/assets/utils/index.js b/src/assets/utils/index.js
new file mode 100644
index 0000000..b3c7e5f
--- /dev/null
+++ b/src/assets/utils/index.js
@@ -0,0 +1,38 @@
+export default {
+  insertBody(elx){
+    document.body.insertBefore(elx, document.body.firstChild)
+  },
+  removeBody(element) {
+    let bodyx = document.body
+    bodyx.removeChild(element);
+  },
+  changePosition(elx,content,conditional){
+    let topx = 0
+    let leftx = 0
+    let widthx = 0
+    let scrollTopx = window.pageYOffset || document.documentElement.scrollTop;
+    if(elx.getBoundingClientRect().top + 300 >= window.innerHeight) {
+      setTimeout( ()=> {
+        if(conditional){
+          topx = (elx.getBoundingClientRect().top - content.clientHeight) + scrollTopx
+        } else {
+          topx = (elx.getBoundingClientRect().top - content.clientHeight + elx.clientHeight) + scrollTopx
+        }
+      }, 1);
+
+    } else {
+      topx = conditional?(elx.getBoundingClientRect().top + elx.clientHeight) + scrollTopx + 5:elx.getBoundingClientRect().top + scrollTopx
+    }
+
+    leftx = elx.getBoundingClientRect().left
+    widthx = elx.offsetWidth
+
+    let cords = {
+      left: `${leftx}px`,
+      top: `${topx}px`,
+      width: `${widthx}px`
+    }
+
+    return cords
+  },
+}
diff --git a/src/assets/utils/theme.js b/src/assets/utils/theme.js
new file mode 100644
index 0000000..5c99371
--- /dev/null
+++ b/src/assets/utils/theme.js
@@ -0,0 +1,18 @@
+import color from './color.js'
+export default {
+  name:'theme',
+  vsfunction(json){
+    for (var clave in json) {
+      let colorx
+      if(/^[rgb(]/g.test(json[clave])){
+        colorx = json[clave].replace(/[rgb()]/g,'')
+      } else if(/[#]/g.test(json[clave])){
+        let rgbx = color.hexToRgb(json[clave])
+        colorx = `${rgbx.r},${rgbx.g},${rgbx.b}`
+      } else {
+        colorx = json[clave]
+      }
+      color.setCssVariable('--vs-'+clave,colorx)
+    }
+  },
+}
diff --git a/src/auth/authService.js b/src/auth/authService.js
new file mode 100644
index 0000000..243ba34
--- /dev/null
+++ b/src/auth/authService.js
@@ -0,0 +1,114 @@
+import auth0 from 'auth0-js'
+import EventEmitter from 'events'
+import authConfig from '@/../auth_config.json'
+
+import store from '@/store/store.js'
+
+// 'loggedIn' is used in other parts of application. So, Don't forget to change there also
+const localStorageKey = 'loggedIn'
+
+const tokenExpiryKey = 'tokenExpiry'
+const loginEvent = 'loginEvent'
+
+const webAuth = new auth0.WebAuth({
+  domain: authConfig.domain,
+  redirectUri: `${window.location.origin + process.env.BASE_URL}callback`,
+  clientID: authConfig.clientId,
+  responseType: 'id_token',
+  scope: 'openid profile email'
+})
+
+class AuthService extends EventEmitter {
+    idToken = null;
+    profile = null;
+    tokenExpiry = null;
+
+    // Starts the user login flow
+    login (customState) {
+      webAuth.authorize({
+        appState: customState
+      })
+    }
+
+    // Handles the callback request from Auth0
+    handleAuthentication () {
+      return new Promise((resolve, reject) => {
+        webAuth.parseHash((err, authResult) => {
+          if (err) {
+            alert(`${err.error}. Detailed error can be found in console.`)
+            reject(err)
+          } else {
+            this.localLogin(authResult)
+            resolve(authResult.idToken)
+          }
+        })
+      })
+    }
+
+    localLogin (authResult) {
+      this.idToken = authResult.idToken
+      this.profile = authResult.idTokenPayload
+
+      // Convert the JWT expiry time from seconds to milliseconds
+      this.tokenExpiry = new Date(this.profile.exp * 1000)
+      localStorage.setItem(tokenExpiryKey, this.tokenExpiry)
+      localStorage.setItem(localStorageKey, 'true')
+
+      store.commit('UPDATE_USER_INFO', {
+        displayName: this.profile.name,
+        email: this.profile.email,
+        photoURL: this.profile.picture,
+        providerId: this.profile.sub.substr(0, this.profile.sub.indexOf('|')),
+        uid: this.profile.sub
+      })
+
+      this.emit(loginEvent, {
+        loggedIn: true,
+        profile: authResult.idTokenPayload,
+        state: authResult.appState || {}
+      })
+    }
+
+    renewTokens () {
+      // reject can be used as parameter in promise for using reject
+      return new Promise((resolve) => {
+        if (localStorage.getItem(localStorageKey) !== 'true') {
+          // return reject("Not logged in");
+        }
+
+        webAuth.checkSession({}, (err, authResult) => {
+          if (err) {
+            // reject(err);
+          } else {
+            this.localLogin(authResult)
+            resolve(authResult)
+          }
+        })
+      })
+    }
+
+    logOut () {
+      localStorage.removeItem(localStorageKey)
+      localStorage.removeItem(tokenExpiryKey)
+      localStorage.removeItem('userInfo')
+
+      this.idToken = null
+      this.tokenExpiry = null
+      this.profile = null
+
+      webAuth.logout({
+        returnTo: window.location.origin + process.env.BASE_URL
+      })
+
+      this.emit(loginEvent, { loggedIn: false })
+    }
+
+    isAuthenticated () {
+      return (
+        new Date(Date.now()) < new Date(localStorage.getItem(tokenExpiryKey)) &&
+            localStorage.getItem(localStorageKey) === 'true'
+      )
+    }
+}
+
+export default new AuthService()
diff --git a/src/axios.js b/src/axios.js
new file mode 100644
index 0000000..cff0fda
--- /dev/null
+++ b/src/axios.js
@@ -0,0 +1,35 @@
+// axios
+import axios from 'axios'
+
+const domain = ""
+// import themeConfig from '@/../themeConfig.js'
+
+export var getHeader = () => {
+
+    return {
+        'Content-Type': 'application/json',
+        'Authorization': 'Bearer ' + localStorage.getItem("accessToken") || localStorage.accessToken
+    };
+}
+
+
+var myax= new axios.create({
+    baseURL: 'http://hr.asco-intl.com/back/public/api/',
+    headers: getHeader(),
+    domain
+})
+
+myax.interceptors.request.use(
+    config => {
+        config.headers["Authorization"] = "Bearer " + localStorage.getItem("accessToken");
+        return config;
+    },
+    error => {
+        Promise.reject(error);
+    }
+);
+
+export default myax;
+
+
+
diff --git a/src/components/ChangeTimeDurationDropdown.vue b/src/components/ChangeTimeDurationDropdown.vue
new file mode 100644
index 0000000..f87b615
--- /dev/null
+++ b/src/components/ChangeTimeDurationDropdown.vue
@@ -0,0 +1,24 @@
+    
+
+
+
+
diff --git a/src/components/FeatherIcon.vue b/src/components/FeatherIcon.vue
new file mode 100644
index 0000000..4a47414
--- /dev/null
+++ b/src/components/FeatherIcon.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
diff --git a/src/components/SendMsg.vue b/src/components/SendMsg.vue
new file mode 100644
index 0000000..9d2a770
--- /dev/null
+++ b/src/components/SendMsg.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
diff --git a/src/components/VxTour.vue b/src/components/VxTour.vue
new file mode 100644
index 0000000..535b22e
--- /dev/null
+++ b/src/components/VxTour.vue
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
diff --git a/src/components/excel/ImportExcel.vue b/src/components/excel/ImportExcel.vue
new file mode 100644
index 0000000..598134d
--- /dev/null
+++ b/src/components/excel/ImportExcel.vue
@@ -0,0 +1,124 @@
+
+
+
diff --git a/src/components/form-creator/FormCreator.vue b/src/components/form-creator/FormCreator.vue
new file mode 100644
index 0000000..2360143
--- /dev/null
+++ b/src/components/form-creator/FormCreator.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
diff --git a/src/components/query-selector/QuerySelector.vue b/src/components/query-selector/QuerySelector.vue
new file mode 100644
index 0000000..8625e5b
--- /dev/null
+++ b/src/components/query-selector/QuerySelector.vue
@@ -0,0 +1,73 @@
+
+
+
diff --git a/src/components/statistics-cards/StatisticsCardLine.vue b/src/components/statistics-cards/StatisticsCardLine.vue
new file mode 100644
index 0000000..14166ec
--- /dev/null
+++ b/src/components/statistics-cards/StatisticsCardLine.vue
@@ -0,0 +1,138 @@
+
+
+
+
+
diff --git a/src/components/statistics-cards/chartConfigs.js b/src/components/statistics-cards/chartConfigs.js
new file mode 100644
index 0000000..7db99b5
--- /dev/null
+++ b/src/components/statistics-cards/chartConfigs.js
@@ -0,0 +1,114 @@
+export default {
+  areaChartOptions: {
+    grid: {
+      show: false,
+      padding: {
+        left: 0,
+        right: 0
+      }
+    },
+    chart: {
+      toolbar: {
+        show: false
+      },
+      sparkline: {
+        enabled: true
+      }
+    },
+    dataLabels: {
+      enabled: false
+    },
+    stroke: {
+      curve: 'smooth',
+      width: 2.5
+    },
+    fill: {
+      type: 'gradient',
+      gradient: {
+        shadeIntensity: 0.9,
+        opacityFrom: 0.5,
+        opacityTo: 0.2,
+        stops: [0, 80, 100]
+      }
+    },
+    xaxis: {
+      type: 'numeric',
+      lines: {
+        show: false
+      },
+      axisBorder: {
+        show: false
+      },
+      labels: { show: false }
+    },
+    yaxis: [
+      {
+        y: 0,
+        offsetX: 0,
+        offsetY: 0,
+        padding: {
+          left: 0,
+          right: 0
+        }
+      }
+    ],
+    tooltip: {
+      x: { show: false }
+    }
+  },
+  lineChartOptions: {
+    grid: {
+      show: false,
+      padding: {
+        left: 0,
+        right: 0
+      }
+    },
+    chart: {
+      type: 'line',
+      dropShadow: {
+        enabled: true,
+        top: 5,
+        left: 0,
+        blur: 4,
+        opacity: 0.10
+      },
+      toolbar: {
+        show: false
+      },
+      sparkline: {
+        enabled: true
+      }
+    },
+    stroke: {
+      width: 5,
+      curve: 'smooth'
+    },
+    xaxis: {
+      type: 'numeric'
+    },
+    // colors: ['#7367F0'],
+    fill: {
+      type: 'gradient',
+      gradient: {
+        shade: 'dark',
+        // gradientToColors: ['#A9A2F6'],
+        shadeIntensity: 1,
+        type: 'horizontal',
+        opacityFrom: 1,
+        opacityTo: 1,
+        stops: [0, 100, 100, 100]
+      }
+    },
+    markers: {
+      size: 0,
+      hover: {
+        size: 5
+      }
+    },
+    tooltip: {
+      x: { show: false }
+    }
+  }
+
+}
diff --git a/src/components/tag-creator/TagCreator.vue b/src/components/tag-creator/TagCreator.vue
new file mode 100644
index 0000000..f4782b7
--- /dev/null
+++ b/src/components/tag-creator/TagCreator.vue
@@ -0,0 +1,81 @@
+
+
diff --git a/src/components/timeline/VxTimeline.vue b/src/components/timeline/VxTimeline.vue
new file mode 100644
index 0000000..37610e3
--- /dev/null
+++ b/src/components/timeline/VxTimeline.vue
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
diff --git a/src/components/vx-auto-suggest/VxAutoSuggest.vue b/src/components/vx-auto-suggest/VxAutoSuggest.vue
new file mode 100644
index 0000000..e36464a
--- /dev/null
+++ b/src/components/vx-auto-suggest/VxAutoSuggest.vue
@@ -0,0 +1,263 @@
+
+
+
+
+
diff --git a/src/components/vx-card/VxCard.vue b/src/components/vx-card/VxCard.vue
new file mode 100644
index 0000000..50c1fe2
--- /dev/null
+++ b/src/components/vx-card/VxCard.vue
@@ -0,0 +1,310 @@
+
+
+
+
+
+
+
diff --git a/src/components/vx-input-group/VxInputGroup.vue b/src/components/vx-input-group/VxInputGroup.vue
new file mode 100644
index 0000000..f3ba1c0
--- /dev/null
+++ b/src/components/vx-input-group/VxInputGroup.vue
@@ -0,0 +1,33 @@
+
+
+
+
+
diff --git a/src/components/vx-list/VxList.vue b/src/components/vx-list/VxList.vue
new file mode 100644
index 0000000..789dac9
--- /dev/null
+++ b/src/components/vx-list/VxList.vue
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
diff --git a/src/components/vx-table/VxTable.vue b/src/components/vx-table/VxTable.vue
new file mode 100644
index 0000000..654b70f
--- /dev/null
+++ b/src/components/vx-table/VxTable.vue
@@ -0,0 +1,27 @@
+
+
+
+
+
diff --git a/src/components/x-table/DatePickerBetweenXTableFilter.vue b/src/components/x-table/DatePickerBetweenXTableFilter.vue
new file mode 100644
index 0000000..43d60c0
--- /dev/null
+++ b/src/components/x-table/DatePickerBetweenXTableFilter.vue
@@ -0,0 +1,83 @@
+
+
+
diff --git a/src/components/x-table/DateXTableFilter.vue b/src/components/x-table/DateXTableFilter.vue
new file mode 100644
index 0000000..27f4ffd
--- /dev/null
+++ b/src/components/x-table/DateXTableFilter.vue
@@ -0,0 +1,93 @@
+
+
+
diff --git a/src/components/x-table/NumberXTableFilter.vue b/src/components/x-table/NumberXTableFilter.vue
new file mode 100644
index 0000000..197fa1c
--- /dev/null
+++ b/src/components/x-table/NumberXTableFilter.vue
@@ -0,0 +1,93 @@
+
+
+
diff --git a/src/components/x-table/SelectOptionXTableFilter.vue b/src/components/x-table/SelectOptionXTableFilter.vue
new file mode 100644
index 0000000..2ecb636
--- /dev/null
+++ b/src/components/x-table/SelectOptionXTableFilter.vue
@@ -0,0 +1,59 @@
+
+
+
diff --git a/src/components/x-table/SwitchXTableFilter.vue b/src/components/x-table/SwitchXTableFilter.vue
new file mode 100644
index 0000000..5dc672b
--- /dev/null
+++ b/src/components/x-table/SwitchXTableFilter.vue
@@ -0,0 +1,79 @@
+
+
+
diff --git a/src/components/x-table/TextXTableFilter.vue b/src/components/x-table/TextXTableFilter.vue
new file mode 100644
index 0000000..61b8dd4
--- /dev/null
+++ b/src/components/x-table/TextXTableFilter.vue
@@ -0,0 +1,93 @@
+
+
+
diff --git a/src/components/x-table/XTable.vue b/src/components/x-table/XTable.vue
new file mode 100644
index 0000000..e09c48f
--- /dev/null
+++ b/src/components/x-table/XTable.vue
@@ -0,0 +1,286 @@
+
+
+
+
+
diff --git a/src/components/x-table/index.js b/src/components/x-table/index.js
new file mode 100644
index 0000000..ea45a9d
--- /dev/null
+++ b/src/components/x-table/index.js
@@ -0,0 +1,7 @@
+import Xtc from "./model/Xtc";
+import XTbl from "./model/XTbl";
+
+export {Xtc};
+
+export default XTbl;
+
diff --git a/src/components/x-table/index__.ts b/src/components/x-table/index__.ts
new file mode 100644
index 0000000..d29b327
--- /dev/null
+++ b/src/components/x-table/index__.ts
@@ -0,0 +1,30 @@
+export interface Xtc {
+  title: string;
+  key: string;
+
+  filter(): Xtc;
+
+  filterSwitch(): Xtc;
+
+  filterSelect(items: {}[]): Xtc;
+
+  filterDate(): Xtc;
+
+  filterNumber(): Xtc;
+
+  renderSlot(slotName: string): Xtc;
+
+  export(): {};
+}
+
+export interface XTbl {
+
+  title: string;
+  url: string;
+  cols: Xtc[];
+
+  addCol(col: Xtc): void;
+
+  addAll(cols: Xtc[]): void;
+
+}
diff --git a/src/components/x-table/model/XTbl.js b/src/components/x-table/model/XTbl.js
new file mode 100644
index 0000000..3f1cd3e
--- /dev/null
+++ b/src/components/x-table/model/XTbl.js
@@ -0,0 +1,47 @@
+import Xtc from './Xtc.js';
+
+export default class XTbl {
+  title;
+  url;
+  cols;
+  opt;
+
+  constructor(url, title) {
+    this.url = url;
+    this.title = title;
+  }
+
+  add(col) {
+    if (!this.cols) {
+      this.cols = [];
+    }
+    this.cols.push(col);
+  }
+
+
+  addOpt(col, slotEdit, slotDelete, ridEdit, ridDelete) {
+    this.opt = new Xtc('opt', 'عملیات').noSort();
+    this.opt.opt = true;
+    this.opt.slotEdit = slotEdit;
+    this.opt.slotDelete = slotDelete;
+    this.cols.push(this.opt)
+    return this;
+  }
+
+
+  hidePagination() {
+    this._hidePageination = true;
+    return this;
+  }
+
+  hideSearch() {
+    this._hidePageination = true;
+    return this;
+  }
+
+  addExtraBtn(btn) {
+    this._hidePageination = true;
+    return this;
+  }
+}
+
diff --git a/src/components/x-table/model/Xtc.js b/src/components/x-table/model/Xtc.js
new file mode 100644
index 0000000..0b929c8
--- /dev/null
+++ b/src/components/x-table/model/Xtc.js
@@ -0,0 +1,97 @@
+export default class Xtc {
+  constructor(key, title) {
+    this.key = key;
+    this.title = title;
+    this.dataIndex = key;
+    this.show = true;
+    this.sorter = true;
+  }
+
+  export() {
+    let exp = {};
+    exp['key'] = this.key;
+    exp['dataIndex'] = this.key;
+    exp['title'] = this.title;
+    if (this._slots) {
+      exp['scopedSlots'] = this._slots;
+    }
+
+    if (this.filter) {
+      this.filter = this.filterType;
+      this.filtered = true;
+    }
+    return exp;
+  }
+
+
+  renderSlot(name) {
+    this._slots = {
+      customRender: name
+    };
+    if (!this.scopedSlots) {
+      this.scopedSlots = {}
+    }
+    this.scopedSlots.customRender = name;
+    return this;
+  }
+
+  __filter() {
+    this.filtered = true;
+    if (!this._slots) {
+      this.scopedSlots = {};
+    }
+    this.scopedSlots.filterDropdown = `${this.key}_filterDropdown`;
+  }
+
+  filterText() {
+    this.__filter();
+    this.filterType = 'default';
+    return this;
+  }
+
+  filterSwitch() {
+    this.__filter();
+
+    this.filterType = 'switch';
+    return this;
+  }
+
+
+  filterQuery(action) {
+    this.__filter();
+    this.filterType = 'query';
+    this.filterAction = action;
+    return this;
+  }
+
+  filterDate() {
+    this.__filter();
+    this.filterType = 'date';
+    return this;
+  }
+
+  filterSelect(items) {
+    this.__filter();
+    this.filterType = 'select';
+    this.filterItems = items;
+    return this;
+  }
+
+  filterNumber() {
+    this.__filter();
+    this.filterType = 'number';
+    return this;
+  }
+
+  noSort() {
+    this.sorter = false;
+    return this;
+  }
+
+  hidden() {
+    this.show = false;
+    return this;
+  }
+
+}
+
diff --git a/src/components/x-table/test.js b/src/components/x-table/test.js
new file mode 100644
index 0000000..5873690
--- /dev/null
+++ b/src/components/x-table/test.js
@@ -0,0 +1,15 @@
+import XTbl, {Xtc} from './index';
+
+const tbl = new XTbl('http://kheyr.flut.ir/api/get-person', 'جدول مشتریان');
+tbl.add(new Xtc('id', 'آیدی').filterNumber());
+tbl.add(new Xtc('title', 'عنوان').filterText())
+tbl.add(new Xtc('fname', 'نام کوچک').filterText())
+tbl.add(new Xtc('lname', 'نام بزرگ').filterText())
+tbl.add(new Xtc('ncode', 'کد ملی').filterText().hidden().noSort())
+tbl.add(new Xtc('birth_date', 'تاریخ تولد').filterDate().hidden().noSort())
+tbl.add(new Xtc('sts_str', 'وضعیت').renderSlot('sts_str').filterSelect({1: 'گزینه اول'}).noSort())
+tbl.add(new Xtc('active', 'فعال').filterSwitch().hidden().noSort())
+tbl.add(new Xtc('wow', 'فعال').filterSwitch().renderSlot('wow').noSort())
+tbl.addOpt()
+
+export default tbl;
diff --git a/src/components/x-upload/XUpload.vue b/src/components/x-upload/XUpload.vue
new file mode 100644
index 0000000..cac706e
--- /dev/null
+++ b/src/components/x-upload/XUpload.vue
@@ -0,0 +1,122 @@
+
+
+
+
+
diff --git a/src/components/x-upload/XupladCard.vue b/src/components/x-upload/XupladCard.vue
new file mode 100644
index 0000000..96603b8
--- /dev/null
+++ b/src/components/x-upload/XupladCard.vue
@@ -0,0 +1,124 @@
+
+
+
+
+
diff --git a/src/fake-db/data/apps/calendar/index.js b/src/fake-db/data/apps/calendar/index.js
new file mode 100644
index 0000000..8416c73
--- /dev/null
+++ b/src/fake-db/data/apps/calendar/index.js
@@ -0,0 +1,107 @@
+import mock from '@/fake-db/mock.js'
+
+// Contact
+const data = {
+  events: [
+    {
+      id: 1,
+      title: 'My Event',
+      startDate: new Date(new Date() - 1000 * 60 * 60 * 24 * 3),
+      endDate: new Date(new Date() - 1000 * 60 * 60 * 24 * 2),
+      url: '',
+      classes: 'event-success',
+      label: 'business'
+    }
+  ],
+  labels: [
+    {
+      text: 'Business',
+      value : 'business',
+      color: 'success'
+    },
+    {
+      text: 'Work',
+      value: 'work',
+      color: 'warning'
+    },
+    {
+      text: 'Personal',
+      value: 'personal',
+      color: 'danger'
+    }
+  ]
+}
+
+// GET : Calendar Events
+mock.onGet('/api/apps/calendar/events').reply(() => {
+  return [200, data.events]
+})
+
+// POST : Add new events
+mock.onPost('/api/apps/calendar/events/').reply((request) => {
+
+  // Get event from post data
+  const event = JSON.parse(request.data).event
+
+  const length = data.events.length
+  let lastIndex = 0
+  if (length) {
+    lastIndex = data.events[length - 1].id
+  }
+  event.id = lastIndex + 1
+
+  data.events.push(event)
+
+  return [201, {id: event.id}]
+})
+
+// GET: Fetch Calendar Labels
+mock.onGet('api/apps/calendar/labels').reply(() => {
+  return [200, data.labels]
+})
+
+// POST: Update Event
+mock.onPost(/\/api\/apps\/calendar\/event\/\d+/).reply((request) => {
+
+  const e = JSON.parse(request.data).event
+  e.startDate = new Date(e.startDate)
+  e.endDate = new Date(e.endDate)
+
+  const eventId = request.url.substring(request.url.lastIndexOf('/') + 1)
+
+
+  const event = data.events.find((event) => event.id == eventId)
+  Object.assign(event, e)
+
+  return [200, event]
+})
+
+// DELETE: Remove Event
+mock.onDelete(/\/api\/apps\/calendar\/event\/\d+/).reply((request) => {
+
+  const eventId = request.url.substring(request.url.lastIndexOf('/') + 1)
+
+  const eventIndex = data.events.findIndex((event) => event.id == eventId)
+  data.events.splice(eventIndex, 1)
+  return [200]
+})
+
+// POST: Update Dragged Event
+mock.onPost(/\/api\/apps\/calendar\/event\/dragged\/\d+/).reply((request) => {
+
+  const eventId = request.url.substring(request.url.lastIndexOf('/') + 1)
+  const event = data.events.find((event) => event.id == eventId)
+  const payload = JSON.parse(request.data).payload
+
+  const draggedDateStart = new Date(payload.date)
+
+  const eventStartDate = new Date(event.startDate).getTime()
+  const eventEndDate = new Date(event.endDate).getTime()
+
+  const diff = draggedDateStart - eventStartDate
+  const newEndDate = new Date(eventEndDate + diff)
+  event.startDate = draggedDateStart
+  event.endDate = newEndDate
+
+  return [200, event]
+})
diff --git a/src/fake-db/data/apps/chat/index.js b/src/fake-db/data/apps/chat/index.js
new file mode 100644
index 0000000..2db77fb
--- /dev/null
+++ b/src/fake-db/data/apps/chat/index.js
@@ -0,0 +1,288 @@
+import mock from '@/fake-db/mock.js'
+
+// Contact
+const data = {
+  contacts: [
+    {
+      uid: 1,
+      displayName: 'Felecia Rower',
+      about: 'Cake pie jelly jelly beans. Marzipan lemon drops halvah cake. Pudding cookie lemon drops icing',
+      photoURL: require('@/assets/images/portrait/small/avatar-s-1.jpg'),
+      status: 'offline'
+    },
+    {
+      uid: 2,
+      displayName: 'Adalberto Granzin',
+      about: 'Toffee caramels jelly-o tart gummi bears cake I love ice cream lollipop. Sweet liquorice croissant candy danish dessert icing. Cake macaroon gingerbread toffee sweet.',
+      photoURL: require('@/assets/images/portrait/small/avatar-s-2.jpg'),
+      status: 'do not disturb'
+    },
+    {
+      uid: 3,
+      displayName: 'Joaquina Weisenborn',
+      about: 'Soufflé soufflé caramels sweet roll. Jelly lollipop sesame snaps bear claw jelly beans sugar plum sugar plum.',
+      photoURL: require('@/assets/images/portrait/small/avatar-s-3.jpg'),
+      status: 'do not disturb'
+    },
+    {
+      uid: 4,
+      displayName: 'Verla Morgano',
+      about: 'Chupa chups candy canes chocolate bar marshmallow liquorice muffin. Lemon drops oat cake tart liquorice tart cookie. Jelly-o cookie tootsie roll halvah.',
+      photoURL: require('@/assets/images/portrait/small/avatar-s-4.jpg'),
+      status: 'online'
+    },
+    {
+      uid: 5,
+      displayName: 'Margot Henschke',
+      about: 'Cake pie jelly jelly beans. Marzipan lemon drops halvah cake. Pudding cookie lemon drops icing',
+      photoURL: require('@/assets/images/portrait/small/avatar-s-5.jpg'),
+      status: 'do not disturb'
+    },
+    {
+      uid: 6,
+      displayName: 'Sal Piggee',
+      about: 'Toffee caramels jelly-o tart gummi bears cake I love ice cream lollipop. Sweet liquorice croissant candy danish dessert icing. Cake macaroon gingerbread toffee sweet.',
+      photoURL: require('@/assets/images/portrait/small/avatar-s-6.jpg'),
+      status: 'online'
+    },
+    {
+      uid: 7,
+      displayName: 'Miguel Guelff',
+      about: 'Biscuit powder oat cake donut brownie ice cream I love soufflé. I love tootsie roll I love powder tootsie roll.',
+      photoURL: require('@/assets/images/portrait/small/avatar-s-7.jpg'),
+      status: 'online'
+    },
+    {
+      uid: 8,
+      displayName: 'Mauro Elenbaas',
+      about: 'Bear claw ice cream lollipop gingerbread carrot cake. Brownie gummi bears chocolate muffin croissant jelly I love marzipan wafer.',
+      photoURL: require('@/assets/images/portrait/small/avatar-s-8.jpg'),
+      status: 'away'
+    },
+    {
+      uid: 9,
+      displayName: 'Bridgett Omohundro',
+      about: 'Gummies gummi bears I love candy icing apple pie I love marzipan bear claw. I love tart biscuit I love candy canes pudding chupa chups liquorice croissant.',
+      photoURL: require('@/assets/images/portrait/small/avatar-s-9.jpg'),
+      status: 'offline'
+    },
+    {
+      uid: 10,
+      displayName: 'Zenia Jacobs',
+      about: 'Cake pie jelly jelly beans. Marzipan lemon drops halvah cake. Pudding cookie lemon drops icing',
+      photoURL: require('@/assets/images/portrait/small/avatar-s-10.jpg'),
+      status: 'away'
+    }
+  ],
+  chats: {
+    1: {
+      isPinned: true,
+      msg: [
+        {
+          textContent: 'How can we help? We\'re here for you!',
+          time: 'Mon Dec 10 2018 07:45:00 GMT+0000 (GMT)',
+          isSent: true,
+          isSeen: true
+        },
+        {
+          textContent: 'Hey John, I am looking for the best admin template. Could you please help me to find it out?',
+          time: 'Mon Dec 10 2018 07:45:23 GMT+0000 (GMT)',
+          isSent: false,
+          isSeen: true
+        },
+        {
+          textContent: 'It should be Bootstrap 4 compatible.',
+          time: 'Mon Dec 10 2018 07:45:55 GMT+0000 (GMT)',
+          isSent: false,
+          isSeen: true
+        },
+        {
+          textContent: 'Absolutely!',
+          time: 'Mon Dec 10 2018 07:46:00 GMT+0000 (GMT)',
+          isSent: true,
+          isSeen: true
+        },
+        {
+          textContent: 'Modern admin is the responsive bootstrap 4 admin template.!',
+          time: 'Mon Dec 10 2018 07:46:05 GMT+0000 (GMT)',
+          isSent: true,
+          isSeen: true
+        },
+        {
+          textContent: 'Looks clean and fresh UI.',
+          time: 'Mon Dec 10 2018 07:46:23 GMT+0000 (GMT)',
+          isSent: false,
+          isSeen: true
+        },
+        {
+          textContent: 'It\'s perfect for my next project.',
+          time: 'Mon Dec 10 2018 07:46:33 GMT+0000 (GMT)',
+          isSent: false,
+          isSeen: true
+        },
+        {
+          textContent: 'How can I purchase it?',
+          time: 'Mon Dec 10 2018 07:46:43 GMT+0000 (GMT)',
+          isSent: false,
+          isSeen: true
+        },
+        {
+          textContent: 'Thanks, from ThemeForest.',
+          time: 'Mon Dec 10 2018 07:46:53 GMT+0000 (GMT)',
+          isSent: true,
+          isSeen: true
+        },
+        {
+          textContent: 'I will purchase it for sure. 👍',
+          time: 'Mon Dec 10 2018 07:47:00 GMT+0000 (GMT)',
+          isSent: false,
+          isSeen: false
+        }
+      ]
+    },
+    2: {
+      isPinned: false,
+      msg: [
+        {
+          textContent: 'Hi',
+          time: 'Mon Dec 10 2018 07:45:00 GMT+0000 (GMT)',
+          isSent: true,
+          isSeen: true
+        },
+        {
+          textContent: 'Hello. How can I help You?',
+          time: 'Mon Dec 11 2018 07:45:15 GMT+0000 (GMT)',
+          isSent: false,
+          isSeen: true
+        },
+        {
+          textContent: 'Can I get details of my last transaction I made last month?',
+          time: 'Mon Dec 11 2018 07:46:10 GMT+0000 (GMT)',
+          isSent: true,
+          isSeen: true
+        },
+        {
+          textContent: 'We need to check if we can provide you such information.',
+          time: 'Mon Dec 11 2018 07:45:15 GMT+0000 (GMT)',
+          isSent: false,
+          isSeen: true
+        },
+        {
+          textContent: 'I will inform you as I get update on this.',
+          time: 'Mon Dec 11 2018 07:46:15 GMT+0000 (GMT)',
+          isSent: false,
+          isSeen: true
+        },
+        {
+          textContent: 'If it takes long you can mail me at my mail address.',
+          time: 'Mon Dec 11 2018 07:46:20 GMT+0000 (GMT)',
+          isSent: true,
+          isSeen: false
+        }
+      ]
+    }
+  }
+}
+
+// Functions
+const chatDataOfUser = (id) => {
+  return data.chats[Object.keys(data.chats).find(key => key == id)]
+}
+
+// GET : Contacts List
+mock.onGet('/api/apps/chat/contacts').reply((request) => {
+
+  // Filter contact based on search query
+  const filteredContacts = data.contacts.filter((contact) => {
+    return contact.displayName.toLowerCase().includes(request.params.q.toLowerCase())
+  })
+
+  return [200, filteredContacts]
+})
+
+
+// GET : Get All Contacts
+mock.onGet('/api/apps/chat/contacts').reply(() => {
+  return [200, data.contacts]
+})
+
+// GET : Get All Chats
+mock.onGet('/api/apps/chat/chats').reply(() => {
+  return [200, data.chats]
+})
+
+// GET : Chats List
+mock.onGet('/api/apps/chat/chat-contacts').reply((request) => {
+
+  const chatContactsArray = data.contacts.filter((contact) => {
+    if (data.chats[contact.uid]) return data.chats[contact.uid] && contact.displayName.toLowerCase().includes(request.params.q.toLowerCase())
+  })
+
+  return [200, chatContactsArray]
+})
+
+
+// POST : Mark all msgs as seen
+mock.onPost('/api/apps/chat/mark-all-seen/').reply((request) => {
+  const contactId = JSON.parse(request.data).contactId
+
+
+  // Get chat data
+  const chatLog = chatDataOfUser(contactId)
+
+  // console.log(chatLog);
+  chatDataOfUser(1) == chatLog
+
+  // Loop over all msg & mark them as seen
+  chatLog.msg.forEach((msg) => {
+    msg.isSeen = true
+  })
+
+  // Set unsen Msg flag to 0
+  chatLog.unseenMsg = 0
+
+  // console.log(data.chats[0] == chatDataOfUser(contactId));
+
+  return [200]
+})
+
+
+mock.onPost('/api/apps/chat/set-pinned/').reply((request) => {
+  const {contactId, value} = JSON.parse(request.data)
+  const index = Object.keys(data.chats).find(key => key == contactId)
+  data.chats[index].isPinned = value
+  return [200, data.chats[index]]
+})
+
+
+mock.onPost('/api/apps/chat/msg').reply((request) => {
+  const payload = JSON.parse(request.data).payload
+
+  // Get chat data
+  payload.chatData = chatDataOfUser(payload.id)
+
+  if (payload.chatData) {
+    // If there's already chat. Push msg to existing chat
+    data.chats[Object.keys(data.chats).find(key => key == payload.id)].msg.push(payload.msg)
+  } else {
+    // Create New chat and add msg
+    data.chats[payload.id] = {isPinned: payload.isPinned,
+      msg: [payload.msg]}
+  }
+
+  return [200]
+})
+
+
+mock.onPost('/api/apps/chat/mark-all-seen').reply((request) => {
+  const uid = JSON.parse(request.data).id
+
+  // Get chat data
+  const chatLog = chatDataOfUser(uid)
+
+  chatLog.msg.forEach((msg) => {
+    msg.isSeen = true
+  })
+
+  return [200]
+})
diff --git a/src/fake-db/data/apps/email/index.js b/src/fake-db/data/apps/email/index.js
new file mode 100644
index 0000000..c395656
--- /dev/null
+++ b/src/fake-db/data/apps/email/index.js
@@ -0,0 +1,691 @@
+import mock from '@/fake-db/mock.js'
+
+// Contact
+const data = {
+  emails: [
+    {
+      id: 1,
+      sender: 'tommys@mail.com',
+      sender_name: 'سید علی حنایی',
+      to: ['johndoe@mail.com'],
+      // require('@/assets/images/portrait/small/avatar-s-1.jpg')
+      img: require('@/assets/images/portrait/small/avatar-s-1.jpg'),
+      subject:  'گواهی سپرده کالایی سکه',
+      cc: [],
+      bcc: [],
+      'message': '

لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ، و با استفاده از طراحان گرافیک است، چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است، و برای شرایط فعلی تکنولوژی مورد نیاز، و کاربردهای متنوع با هدف بهبود ابزارهای کاربردی می باشد، کتابهای زیادی در شصت و سه درصد گذشته حال و آینده، شناخت فراوان جامعه و متخصصان را می طلبد، تا با نرم افزارها شناخت بیشتری را برای طراحان رایانه ای علی الخصوص طراحان خلاقی، و فرهنگ پیشرو در زبان فارسی ایجاد کرد، در این صورت می توان امید داشت که تمام و دشواری موجود در ارائه راهکارها، و شرایط سخت تایپ به پایان رسد و زمان مورد نیاز شامل حروفچینی دستاوردهای اصلی، و جوابگوی سوالات پیوسته اهل دنیای موجود طراحی اساسا مورد استفاده قرار گیرد.

', + + attachments: ['log.txt', 'sheet.xls'], + isStarred: false, + labels: ['private'], + time: 'Mon Dec 10 2018 07:46:00 GMT+0000 (GMT)', + replies: [], + mailFolder: 'inbox', + unread: false + }, + { + id: 2, + sender: 'tressag@mail.com', + sender_name: 'محمد حسین عزیزان', + to: ['johndoe@mail.com'], + img: require('@/assets/images/portrait/small/avatar-s-2.jpg'), + subject: ' نه تنها حجم و ارزش معاملات و عرضه و تقاضا ثبت', + cc: ['vrushankbrahmshatriya@mail.com'], + bcc: ['menka@mail.com'], + 'message': '

لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ، و با استفاده از طراحان گرافیک است، چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است، و برای شرایط فعلی تکنولوژی مورد نیاز، و کاربردهای متنوع با هدف بهبود ابزارهای کاربردی می باشد، کتابهای زیادی در شصت و سه درصد گذشته حال و آینده، شناخت فراوان جامعه و متخصصان را می طلبد، تا با نرم افزارها شناخت بیشتری را برای طراحان رایانه ای علی الخصوص طراحان خلاقی، و فرهنگ پیشرو در زبان فارسی ایجاد کرد، در این صورت می توان امید داشت که تمام و دشواری موجود در ارائه راهکارها، و شرایط سخت تایپ به پایان رسد و زمان مورد نیاز شامل حروفچینی دستاوردهای اصلی، و جوابگوی سوالات پیوسته اهل دنیای موجود طراحی اساسا مورد استفاده قرار گیرد.

', + + attachments: ['report.docx'], + isStarred: true, + labels: ['company', 'private'], + time: 'Mon Dec 10 2018 07:55:00 GMT+0000 (GMT)', + replies: [], + mailFolder: 'inbox', + unread: true + }, + { + id: 3, + sender: 'hettiem@mail.com', + sender_name: 'مهدی بنی لوحی', + to: ['johndoe@mail.com', 'hello@pixinvent.net'], + img: require('@/assets/images/portrait/small/avatar-s-3.jpg'), + subject: ' نکته مهم دیگر این است که وقتی بر پایه ', + cc: [], + bcc: [], + 'message': '

لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ، و با استفاده از طراحان گرافیک است، چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است، و برای شرایط فعلی تکنولوژی مورد نیاز، و کاربردهای متنوع با هدف بهبود ابزارهای کاربردی می باشد، کتابهای زیادی در شصت و سه درصد گذشته حال و آینده، شناخت فراوان جامعه و متخصصان را می طلبد، تا با نرم افزارها شناخت بیشتری را برای طراحان رایانه ای علی الخصوص طراحان خلاقی، و فرهنگ پیشرو در زبان فارسی ایجاد کرد، در این صورت می توان امید داشت که تمام و دشواری موجود در ارائه راهکارها، و شرایط سخت تایپ به پایان رسد و زمان مورد نیاز شامل حروفچینی دستاوردهای اصلی، و جوابگوی سوالات پیوسته اهل دنیای موجود طراحی اساسا مورد استفاده قرار گیرد.

', + + attachments: [], + isStarred: false, + labels: ['company'], + time: 'Mon Dec 10 2018 08:35:00 GMT+0000 (GMT)', + replies: [ + { + id: 4, + sender: 'johndoe@mail.com', + sender_name: 'محمد امین غلامی', + to: ['hettiem@mail.com'], + img: require('@/assets/images/portrait/small/avatar-s-11.jpg'), + subject: '', + cc: [], + bcc: [], + 'message': '

لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ، و با استفاده از طراحان گرافیک است، چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است، و برای شرایط فعلی تکنولوژی مورد نیاز، و کاربردهای متنوع با هدف بهبود ابزارهای کاربردی می باشد، کتابهای زیادی در شصت و سه درصد گذشته حال و آینده، شناخت فراوان جامعه و متخصصان را می طلبد، تا با نرم افزارها شناخت بیشتری را برای طراحان رایانه ای علی الخصوص طراحان خلاقی، و فرهنگ پیشرو در زبان فارسی ایجاد کرد، در این صورت می توان امید داشت که تمام و دشواری موجود در ارائه راهکارها، و شرایط سخت تایپ به پایان رسد و زمان مورد نیاز شامل حروفچینی دستاوردهای اصلی، و جوابگوی سوالات پیوسته اهل دنیای موجود طراحی اساسا مورد استفاده قرار گیرد.

', + + attachments: [], + isStarred: false, + labels: [], + time: 'Mon Dec 10 2018 10:56:00 GMT+0000 (GMT)', + replies: [], + mailFolder: '', + unread: false + }, + { + id: 5, + sender: 'hettiem@mail.com', + sender_name: 'احمد رضا مقتدایی', + to: ['johndoe@mail.com'], + img: require('@/assets/images/portrait/small/avatar-s-3.jpg'), + subject: '', + cc: [], + bcc: [], + 'message': '

لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ، و با استفاده از طراحان گرافیک است، چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است، و برای شرایط فعلی تکنولوژی مورد نیاز، و کاربردهای متنوع با هدف بهبود ابزارهای کاربردی می باشد، کتابهای زیادی در شصت و سه درصد گذشته حال و آینده، شناخت فراوان جامعه و متخصصان را می طلبد، تا با نرم افزارها شناخت بیشتری را برای طراحان رایانه ای علی الخصوص طراحان خلاقی، و فرهنگ پیشرو در زبان فارسی ایجاد کرد، در این صورت می توان امید داشت که تمام و دشواری موجود در ارائه راهکارها، و شرایط سخت تایپ به پایان رسد و زمان مورد نیاز شامل حروفچینی دستاوردهای اصلی، و جوابگوی سوالات پیوسته اهل دنیای موجود طراحی اساسا مورد استفاده قرار گیرد.

', + + attachments: ['data.docx'], + isStarred: false, + labels: [], + time: 'Mon Dec 10 2018 11:25:00 GMT+0000 (GMT)', + replies: [], + mailFolder: '', + unread: false + } + ], + mailFolder: 'spam', + unread: false + }, + { + id: 10, + sender: 'louettae@mail.com', + sender_name: 'حبیب فکاری', + to: ['johndoe@mail.com'], + img: require('@/assets/images/portrait/small/avatar-s-4.jpg'), + subject: 'این عضو هیات مدیره بانک', + cc: [], + bcc: [], + 'message': '

لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ، و با استفاده از طراحان گرافیک است، چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است، و برای شرایط فعلی تکنولوژی مورد نیاز، و کاربردهای متنوع با هدف بهبود ابزارهای کاربردی می باشد، کتابهای زیادی در شصت و سه درصد گذشته حال و آینده، شناخت فراوان جامعه و متخصصان را می طلبد، تا با نرم افزارها شناخت بیشتری را برای طراحان رایانه ای علی الخصوص طراحان خلاقی، و فرهنگ پیشرو در زبان فارسی ایجاد کرد، در این صورت می توان امید داشت که تمام و دشواری موجود در ارائه راهکارها، و شرایط سخت تایپ به پایان رسد و زمان مورد نیاز شامل حروفچینی دستاوردهای اصلی، و جوابگوی سوالات پیوسته اهل دنیای موجود طراحی اساسا مورد استفاده قرار گیرد.

', + + attachments: ['report.docx'], + isStarred: false, + labels: ['important'], + time: 'Mon Dec 11 2018 10:55:00 GMT+0000 (GMT)', + replies: [], + mailFolder: 'inbox', + unread: false + }, + { + 'id': 11, + 'sender': 'bposvner0@zdnet.com', + 'sender_name': 'علی فریدی زاده', + 'to': ['johndoe@dot.gov'], + 'img': require('@/assets/images/portrait/small/avatar-s-11.jpg'), + 'subject': ' در سبد سرمایه گذاری افراد را پیدا می کند', + 'cc': [], + 'bcc': [], + 'message': '

لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ، و با استفاده از طراحان گرافیک است، چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است، و برای شرایط فعلی تکنولوژی مورد نیاز، و کاربردهای متنوع با هدف بهبود ابزارهای کاربردی می باشد، کتابهای زیادی در شصت و سه درصد گذشته حال و آینده، شناخت فراوان جامعه و متخصصان را می طلبد، تا با نرم افزارها شناخت بیشتری را برای طراحان رایانه ای علی الخصوص طراحان خلاقی، و فرهنگ پیشرو در زبان فارسی ایجاد کرد، در این صورت می توان امید داشت که تمام و دشواری موجود در ارائه راهکارها، و شرایط سخت تایپ به پایان رسد و زمان مورد نیاز شامل حروفچینی دستاوردهای اصلی، و جوابگوی سوالات پیوسته اهل دنیای موجود طراحی اساسا مورد استفاده قرار گیرد.

', + + 'attachments': ['OrciMaurisLacinia.avi'], + 'isStarred': true, + 'labels': ['private'], + 'time': 'Tue Dec 12 2018 11:55:00 GMT+0000 (GMT)', + 'replies': [], + 'mailFolder': 'spam', + 'unread': true + }, + { + 'id': 12, + 'sender': 'rgilder1@illinois.edu', + 'sender_name': 'علیرضا کراری', + 'to': ['johndoe@google.co.uk'], + 'img': require('@/assets/images/portrait/small/avatar-s-6.jpg'), + 'subject': ' نحوه نگهداری آن ندارد و برای خرید نیز نیازی', + 'cc': [], + 'bcc': [], + 'message': '

لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ، و با استفاده از طراحان گرافیک است، چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است، و برای شرایط فعلی تکنولوژی مورد نیاز، و کاربردهای متنوع با هدف بهبود ابزارهای کاربردی می باشد، کتابهای زیادی در شصت و سه درصد گذشته حال و آینده، شناخت فراوان جامعه و متخصصان را می طلبد، تا با نرم افزارها شناخت بیشتری را برای طراحان رایانه ای علی الخصوص طراحان خلاقی، و فرهنگ پیشرو در زبان فارسی ایجاد کرد، در این صورت می توان امید داشت که تمام و دشواری موجود در ارائه راهکارها، و شرایط سخت تایپ به پایان رسد و زمان مورد نیاز شامل حروفچینی دستاوردهای اصلی، و جوابگوی سوالات پیوسته اهل دنیای موجود طراحی اساسا مورد استفاده قرار گیرد.

', + + 'attachments': ['QuisOdio.txt'], + 'isStarred': false, + 'labels': ['personal'], + 'time': 'Thu Dec 13 2018 08:25:00 GMT+0000 (GMT)', + 'replies': [], + 'mailFolder': 'trash', + 'unread': true + }, + { + 'id': 13, + 'sender': 'swilby2@yandex.ru', + 'sender_name': 'مهدی ترابی', + 'to': ['johndoe@altervista.org'], + 'img': require('@/assets/images/portrait/small/avatar-s-1.jpg'), + 'subject': 'قیمت سکه در بازار سنتی گفت', + 'cc': [], + 'bcc': [], + 'message': '

لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ، و با استفاده از طراحان گرافیک است، چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است، و برای شرایط فعلی تکنولوژی مورد نیاز، و کاربردهای متنوع با هدف بهبود ابزارهای کاربردی می باشد، کتابهای زیادی در شصت و سه درصد گذشته حال و آینده، شناخت فراوان جامعه و متخصصان را می طلبد، تا با نرم افزارها شناخت بیشتری را برای طراحان رایانه ای علی الخصوص طراحان خلاقی، و فرهنگ پیشرو در زبان فارسی ایجاد کرد، در این صورت می توان امید داشت که تمام و دشواری موجود در ارائه راهکارها، و شرایط سخت تایپ به پایان رسد و زمان مورد نیاز شامل حروفچینی دستاوردهای اصلی، و جوابگوی سوالات پیوسته اهل دنیای موجود طراحی اساسا مورد استفاده قرار گیرد.

', + + 'attachments': ['NecMolestieSed.tiff'], + 'isStarred': false, + 'labels': ['company'], + 'time': 'Fri Dec 14 2018 10:55:00 GMT+0000 (GMT)', + 'replies': [], + 'mailFolder': 'draft', + 'unread': false + }, + { + 'id': 14, + 'sender': 'wmannering3@mozilla.org', + 'sender_name': 'سعید اسماعیلی', + 'to': ['johndoe@sciencedaily.com'], + 'img': require('@/assets/images/portrait/small/avatar-s-13.jpg'), + 'subject': ' سپرده کالایی افزایش یابد تا شاهد ', + 'cc': [], + 'bcc': [], + 'message': '

لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ، و با استفاده از طراحان گرافیک است، چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است، و برای شرایط فعلی تکنولوژی مورد نیاز، و کاربردهای متنوع با هدف بهبود ابزارهای کاربردی می باشد، کتابهای زیادی در شصت و سه درصد گذشته حال و آینده، شناخت فراوان جامعه و متخصصان را می طلبد، تا با نرم افزارها شناخت بیشتری را برای طراحان رایانه ای علی الخصوص طراحان خلاقی، و فرهنگ پیشرو در زبان فارسی ایجاد کرد، در این صورت می توان امید داشت که تمام و دشواری موجود در ارائه راهکارها، و شرایط سخت تایپ به پایان رسد و زمان مورد نیاز شامل حروفچینی دستاوردهای اصلی، و جوابگوی سوالات پیوسته اهل دنیای موجود طراحی اساسا مورد استفاده قرار گیرد.

', + + 'attachments': ['Nulla.gif'], + 'isStarred': false, + 'labels': ['private'], + 'time': 'Tue Dec 15 2018 10:55:00 GMT+0000 (GMT)', + 'replies': [], + 'mailFolder': 'inbox', + 'unread': false + }, + { + 'id': 15, + 'sender': 'hfrostdyke4@scientificamerican.com', + 'sender_name': 'علیرضا لندی ', + 'to': ['johndoe@weibo.com'], + 'img': require('@/assets/images/portrait/small/avatar-s-13.jpg'), + 'subject': ' تحویل داده و پس از تایید اصالت ', + 'cc': [], + 'bcc': [], + 'message': '

لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ، و با استفاده از طراحان گرافیک است، چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است، و برای شرایط فعلی تکنولوژی مورد نیاز، و کاربردهای متنوع با هدف بهبود ابزارهای کاربردی می باشد، کتابهای زیادی در شصت و سه درصد گذشته حال و آینده، شناخت فراوان جامعه و متخصصان را می طلبد، تا با نرم افزارها شناخت بیشتری را برای طراحان رایانه ای علی الخصوص طراحان خلاقی، و فرهنگ پیشرو در زبان فارسی ایجاد کرد، در این صورت می توان امید داشت که تمام و دشواری موجود در ارائه راهکارها، و شرایط سخت تایپ به پایان رسد و زمان مورد نیاز شامل حروفچینی دستاوردهای اصلی، و جوابگوی سوالات پیوسته اهل دنیای موجود طراحی اساسا مورد استفاده قرار گیرد.

', + + 'attachments': ['SapienQuisLibero.tiff'], + 'isStarred': true, + 'labels': ['personal'], + 'time': 'Tue Jan 01 2018 10:55:00 GMT+0000 (GMT)', + 'replies': [], + 'mailFolder': 'trash', + 'unread': false + }, + { + 'id': 16, + 'sender': 'pjentzsch5@tamu.edu', + 'sender_name': 'مجید طاهری', + 'to': ['johndoe@skype.com'], + 'img': require('@/assets/images/portrait/small/avatar-s-18.jpg'), + 'subject': 'دیگر این است که وقتی بر پایه', + 'cc': [], + 'bcc': [], + 'message': '

لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ، و با استفاده از طراحان گرافیک است، چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است، و برای شرایط فعلی تکنولوژی مورد نیاز، و کاربردهای متنوع با هدف بهبود ابزارهای کاربردی می باشد، کتابهای زیادی در شصت و سه درصد گذشته حال و آینده، شناخت فراوان جامعه و متخصصان را می طلبد، تا با نرم افزارها شناخت بیشتری را برای طراحان رایانه ای علی الخصوص طراحان خلاقی، و فرهنگ پیشرو در زبان فارسی ایجاد کرد، در این صورت می توان امید داشت که تمام و دشواری موجود در ارائه راهکارها، و شرایط سخت تایپ به پایان رسد و زمان مورد نیاز شامل حروفچینی دستاوردهای اصلی، و جوابگوی سوالات پیوسته اهل دنیای موجود طراحی اساسا مورد استفاده قرار گیرد.

', + + 'attachments': ['UtNulla.avi'], + 'isStarred': true, + 'labels': ['important'], + 'time': 'Tue Jan 03 2018 10:55:00 GMT+0000 (GMT)', + 'replies': [], + 'mailFolder': 'draft', + 'unread': false + }, + { + 'id': 17, + 'sender': 'lminghetti6@yale.edu', + 'sender_name': 'محمد اشجع', + 'to': ['johndoe@fda.gov'], + 'img': require('@/assets/images/portrait/small/avatar-s-4.jpg'), + 'subject': 'صنعت مدیریت دارایی در کشور ', + 'cc': [], + 'bcc': [], + 'message': '

لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ، و با استفاده از طراحان گرافیک است، چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است، و برای شرایط فعلی تکنولوژی مورد نیاز، و کاربردهای متنوع با هدف بهبود ابزارهای کاربردی می باشد، کتابهای زیادی در شصت و سه درصد گذشته حال و آینده، شناخت فراوان جامعه و متخصصان را می طلبد، تا با نرم افزارها شناخت بیشتری را برای طراحان رایانه ای علی الخصوص طراحان خلاقی، و فرهنگ پیشرو در زبان فارسی ایجاد کرد، در این صورت می توان امید داشت که تمام و دشواری موجود در ارائه راهکارها، و شرایط سخت تایپ به پایان رسد و زمان مورد نیاز شامل حروفچینی دستاوردهای اصلی، و جوابگوی سوالات پیوسته اهل دنیای موجود طراحی اساسا مورد استفاده قرار گیرد.

', + + 'attachments': ['ElementumLigula.mp3'], + 'isStarred': true, + 'labels': ['company'], + 'time': 'Tue Jan 03 2018 10:55:00 GMT+0000 (GMT)', + 'replies': [], + 'mailFolder': 'trash', + 'unread': false + }, + { + 'id': 18, + 'sender': 'efinessy7@sbwire.com', + 'sender_name': 'محمد رضا پناهی', + 'to': ['johndoe@odnoklassniki.ru'], + 'img': require('@/assets/images/portrait/small/avatar-s-2.jpg'), + 'subject': ' حال انجام امور نهایی و تکمیل الحاقیه قرارداد', + 'cc': [], + 'bcc': [], + 'message': '

لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ، و با استفاده از طراحان گرافیک است، چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است، و برای شرایط فعلی تکنولوژی مورد نیاز، و کاربردهای متنوع با هدف بهبود ابزارهای کاربردی می باشد، کتابهای زیادی در شصت و سه درصد گذشته حال و آینده، شناخت فراوان جامعه و متخصصان را می طلبد، تا با نرم افزارها شناخت بیشتری را برای طراحان رایانه ای علی الخصوص طراحان خلاقی، و فرهنگ پیشرو در زبان فارسی ایجاد کرد، در این صورت می توان امید داشت که تمام و دشواری موجود در ارائه راهکارها، و شرایط سخت تایپ به پایان رسد و زمان مورد نیاز شامل حروفچینی دستاوردهای اصلی، و جوابگوی سوالات پیوسته اهل دنیای موجود طراحی اساسا مورد استفاده قرار گیرد.

', + + 'attachments': ['Hac.xls'], + 'isStarred': true, + 'labels': ['personal'], + 'time': 'Tue Jan 04 2018 10:55:00 GMT+0000 (GMT)', + 'replies': [], + 'mailFolder': 'sent', + 'unread': false + }, + { + 'id': 19, + 'sender': 'tmckeurton8@163.com', + 'sender_name': 'ابراهیم اسپوتین', + 'to': ['johndoe@nifty.com'], + 'img': require('@/assets/images/portrait/small/avatar-s-14.jpg'), + 'subject': 'عضو هیات مدیره بانک آینده', + 'cc': [], + 'bcc': [], + 'message': '

لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ، و با استفاده از طراحان گرافیک است، چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است، و برای شرایط فعلی تکنولوژی مورد نیاز، و کاربردهای متنوع با هدف بهبود ابزارهای کاربردی می باشد، کتابهای زیادی در شصت و سه درصد گذشته حال و آینده، شناخت فراوان جامعه و متخصصان را می طلبد، تا با نرم افزارها شناخت بیشتری را برای طراحان رایانه ای علی الخصوص طراحان خلاقی، و فرهنگ پیشرو در زبان فارسی ایجاد کرد، در این صورت می توان امید داشت که تمام و دشواری موجود در ارائه راهکارها، و شرایط سخت تایپ به پایان رسد و زمان مورد نیاز شامل حروفچینی دستاوردهای اصلی، و جوابگوی سوالات پیوسته اهل دنیای موجود طراحی اساسا مورد استفاده قرار گیرد.

', + + 'attachments': ['SedAnteVivamus.avi'], + 'isStarred': true, + 'labels': ['important'], + 'time': 'Tue Jan 05 2018 10:55:00 GMT+0000 (GMT)', + 'replies': [], + 'mailFolder': 'draft', + 'unread': true + }, + { + 'id': 20, + 'sender': 'ebegg9@wikia.com', + 'sender_name': 'شهاب موسوی', + 'to': ['johndoe@51.la'], + 'img': require('@/assets/images/portrait/small/avatar-s-19.jpg'), + 'subject': 'اهل دنیای موجود طراحی', + 'cc': [], + 'bcc': [], + 'message': '

لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ، و با استفاده از طراحان گرافیک است، چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است، و برای شرایط فعلی تکنولوژی مورد نیاز، و کاربردهای متنوع با هدف بهبود ابزارهای کاربردی می باشد، کتابهای زیادی در شصت و سه درصد گذشته حال و آینده، شناخت فراوان جامعه و متخصصان را می طلبد، تا با نرم افزارها شناخت بیشتری را برای طراحان رایانه ای علی الخصوص طراحان خلاقی، و فرهنگ پیشرو در زبان فارسی ایجاد کرد، در این صورت می توان امید داشت که تمام و دشواری موجود در ارائه راهکارها، و شرایط سخت تایپ به پایان رسد و زمان مورد نیاز شامل حروفچینی دستاوردهای اصلی، و جوابگوی سوالات پیوسته اهل دنیای موجود طراحی اساسا مورد استفاده قرار گیرد.

', + + 'attachments': ['Eget.jpeg'], + 'isStarred': false, + 'labels': ['company'], + 'time': 'Tue Jan 06 2018 10:55:00 GMT+0000 (GMT)', + 'replies': [], + 'mailFolder': 'inbox', + 'unread': false + }, + { + 'id': 21, + 'sender': 'mspata@sina.com.cn', + 'sender_name': 'امیر قربانی', + 'to': ['johndoe@oracle.com'], + 'img': require('@/assets/images/portrait/small/avatar-s-9.jpg'), + 'subject': 'سکه و نحوه نگهداری آن ندارد', + 'cc': [], + 'bcc': [], + 'message': '

لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ، و با استفاده از طراحان گرافیک است، چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است، و برای شرایط فعلی تکنولوژی مورد نیاز، و کاربردهای متنوع با هدف بهبود ابزارهای کاربردی می باشد، کتابهای زیادی در شصت و سه درصد گذشته حال و آینده، شناخت فراوان جامعه و متخصصان را می طلبد، تا با نرم افزارها شناخت بیشتری را برای طراحان رایانه ای علی الخصوص طراحان خلاقی، و فرهنگ پیشرو در زبان فارسی ایجاد کرد، در این صورت می توان امید داشت که تمام و دشواری موجود در ارائه راهکارها، و شرایط سخت تایپ به پایان رسد و زمان مورد نیاز شامل حروفچینی دستاوردهای اصلی، و جوابگوی سوالات پیوسته اهل دنیای موجود طراحی اساسا مورد استفاده قرار گیرد.

', + + 'attachments': ['Felis.xls'], + 'isStarred': false, + 'labels': ['company'], + 'time': 'Tue Jan 07 2018 10:55:00 GMT+0000 (GMT)', + 'replies': [], + 'mailFolder': 'inbox', + 'unread': true + }, + { + 'id': 22, + 'sender': 'cprandob@rambler.ru', + 'sender_name': 'مرضیه محسنی', + 'to': ['johndoe@vistaprint.com'], + 'img': require('@/assets/images/portrait/small/avatar-s-2.jpg'), + 'subject': 'شاهد بازگشایی نماد معاملاتی', + 'cc': [], + 'bcc': [], + 'message': '

لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ، و با استفاده از طراحان گرافیک است، چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است، و برای شرایط فعلی تکنولوژی مورد نیاز، و کاربردهای متنوع با هدف بهبود ابزارهای کاربردی می باشد، کتابهای زیادی در شصت و سه درصد گذشته حال و آینده، شناخت فراوان جامعه و متخصصان را می طلبد، تا با نرم افزارها شناخت بیشتری را برای طراحان رایانه ای علی الخصوص طراحان خلاقی، و فرهنگ پیشرو در زبان فارسی ایجاد کرد، در این صورت می توان امید داشت که تمام و دشواری موجود در ارائه راهکارها، و شرایط سخت تایپ به پایان رسد و زمان مورد نیاز شامل حروفچینی دستاوردهای اصلی، و جوابگوی سوالات پیوسته اهل دنیای موجود طراحی اساسا مورد استفاده قرار گیرد.

', + + 'attachments': ['HabitasJanlateaDictumst.avi'], + 'isStarred': false, + 'labels': ['company'], + 'time': 'Tue Jan 08 2018 10:55:00 GMT+0000 (GMT)', + 'replies': [], + 'mailFolder': 'sent', + 'unread': false + }, + { + 'id': 23, + 'sender': 'nbartlesc@merriam-webster.com', + 'sender_name': 'احمد رضا شایسته', + 'to': ['johndoe@si.edu'], + 'img': require('@/assets/images/portrait/small/avatar-s-9.jpg'), + 'subject': ' می توانند در این بازار محصولی', + 'cc': [], + 'bcc': [], + 'message': '

لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ، و با استفاده از طراحان گرافیک است، چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است، و برای شرایط فعلی تکنولوژی مورد نیاز، و کاربردهای متنوع با هدف بهبود ابزارهای کاربردی می باشد، کتابهای زیادی در شصت و سه درصد گذشته حال و آینده، شناخت فراوان جامعه و متخصصان را می طلبد، تا با نرم افزارها شناخت بیشتری را برای طراحان رایانه ای علی الخصوص طراحان خلاقی، و فرهنگ پیشرو در زبان فارسی ایجاد کرد، در این صورت می توان امید داشت که تمام و دشواری موجود در ارائه راهکارها، و شرایط سخت تایپ به پایان رسد و زمان مورد نیاز شامل حروفچینی دستاوردهای اصلی، و جوابگوی سوالات پیوسته اهل دنیای موجود طراحی اساسا مورد استفاده قرار گیرد.

', + + 'attachments': ['UltricesPosuere.mpeg'], + 'isStarred': false, + 'labels': ['personal'], + 'time': 'Tue Jan 09 2018 10:55:00 GMT+0000 (GMT)', + 'replies': [], + 'mailFolder': 'spam', + 'unread': false + }, + { + 'id': 24, + 'sender': 'rgennd@dedecms.com', + 'sender_name': 'علی منتظر', + 'to': ['johndoe@about.com'], + 'img': require('@/assets/images/portrait/small/avatar-s-6.jpg'), + 'subject': ' افزایش شفافیت در معاملات سکه', + 'cc': [], + 'bcc': [], + 'message': '

لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ، و با استفاده از طراحان گرافیک است، چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است، و برای شرایط فعلی تکنولوژی مورد نیاز، و کاربردهای متنوع با هدف بهبود ابزارهای کاربردی می باشد، کتابهای زیادی در شصت و سه درصد گذشته حال و آینده، شناخت فراوان جامعه و متخصصان را می طلبد، تا با نرم افزارها شناخت بیشتری را برای طراحان رایانه ای علی الخصوص طراحان خلاقی، و فرهنگ پیشرو در زبان فارسی ایجاد کرد، در این صورت می توان امید داشت که تمام و دشواری موجود در ارائه راهکارها، و شرایط سخت تایپ به پایان رسد و زمان مورد نیاز شامل حروفچینی دستاوردهای اصلی، و جوابگوی سوالات پیوسته اهل دنیای موجود طراحی اساسا مورد استفاده قرار گیرد.

', + + 'attachments': ['Id.tiff'], + 'isStarred': true, + 'labels': ['personal'], + 'time': 'Tue Jan 10 2018 10:55:00 GMT+0000 (GMT)', + 'replies': [], + 'mailFolder': 'spam', + 'unread': false + }, + { + 'id': 25, + 'sender': 'eramelote@webeden.co.uk', + 'sender_name': 'محمد بروجردی', + 'to': ['johndoe@tinypic.com'], + 'img': require('@/assets/images/portrait/small/avatar-s-6.jpg'), + 'subject': 'طراحی اساسا مورد استفاده', + 'cc': [], + 'bcc': [], + 'message': '

لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ، و با استفاده از طراحان گرافیک است، چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است، و برای شرایط فعلی تکنولوژی مورد نیاز، و کاربردهای متنوع با هدف بهبود ابزارهای کاربردی می باشد، کتابهای زیادی در شصت و سه درصد گذشته حال و آینده، شناخت فراوان جامعه و متخصصان را می طلبد، تا با نرم افزارها شناخت بیشتری را برای طراحان رایانه ای علی الخصوص طراحان خلاقی، و فرهنگ پیشرو در زبان فارسی ایجاد کرد، در این صورت می توان امید داشت که تمام و دشواری موجود در ارائه راهکارها، و شرایط سخت تایپ به پایان رسد و زمان مورد نیاز شامل حروفچینی دستاوردهای اصلی، و جوابگوی سوالات پیوسته اهل دنیای موجود طراحی اساسا مورد استفاده قرار گیرد.

', + + 'attachments': ['Augue.mp3'], + 'isStarred': true, + 'labels': ['personal'], + 'time': 'Tue Jan 11 2018 10:55:00 GMT+0000 (GMT)', + 'replies': [], + 'mailFolder': 'spam', + 'unread': true + }, + { + 'id': 26, + 'sender': 'pcuzenf@mediafire.com', + 'sender_name': 'کاظم فیاض', + 'to': ['johndoe@google.es'], + 'img': require('@/assets/images/portrait/small/avatar-s-9.jpg'), + 'subject': ' ثبت می شود و به مرور با ', + 'cc': [], + 'bcc': [], + 'message': '

لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ، و با استفاده از طراحان گرافیک است، چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است، و برای شرایط فعلی تکنولوژی مورد نیاز، و کاربردهای متنوع با هدف بهبود ابزارهای کاربردی می باشد، کتابهای زیادی در شصت و سه درصد گذشته حال و آینده، شناخت فراوان جامعه و متخصصان را می طلبد، تا با نرم افزارها شناخت بیشتری را برای طراحان رایانه ای علی الخصوص طراحان خلاقی، و فرهنگ پیشرو در زبان فارسی ایجاد کرد، در این صورت می توان امید داشت که تمام و دشواری موجود در ارائه راهکارها، و شرایط سخت تایپ به پایان رسد و زمان مورد نیاز شامل حروفچینی دستاوردهای اصلی، و جوابگوی سوالات پیوسته اهل دنیای موجود طراحی اساسا مورد استفاده قرار گیرد.

', + + 'attachments': ['Leo.avi'], + 'isStarred': false, + 'labels': ['private'], + 'time': 'Tue Jan 12 2018 10:55:00 GMT+0000 (GMT)', + 'replies': [], + 'mailFolder': 'spam', + 'unread': true + }, + { + 'id': 27, + 'sender': 'abaldersong@utexas.edu', + 'sender_name': 'محمد رضایی', + 'to': ['johndoe@ow.ly'], + 'img': require('@/assets/images/portrait/small/avatar-s-18.jpg'), + 'subject': 'تسویه حساب سفارش #856620', + 'cc': [], + 'bcc': [], + 'message': '

لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ، و با استفاده از طراحان گرافیک است، چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است، و برای شرایط فعلی تکنولوژی مورد نیاز، و کاربردهای متنوع با هدف بهبود ابزارهای کاربردی می باشد، کتابهای زیادی در شصت و سه درصد گذشته حال و آینده، شناخت فراوان جامعه و متخصصان را می طلبد، تا با نرم افزارها شناخت بیشتری را برای طراحان رایانه ای علی الخصوص طراحان خلاقی، و فرهنگ پیشرو در زبان فارسی ایجاد کرد، در این صورت می توان امید داشت که تمام و دشواری موجود در ارائه راهکارها، و شرایط سخت تایپ به پایان رسد و زمان مورد نیاز شامل حروفچینی دستاوردهای اصلی، و جوابگوی سوالات پیوسته اهل دنیای موجود طراحی اساسا مورد استفاده قرار گیرد.

', + 'attachments': ['Interdum.doc'], + 'isStarred': true, + 'labels': ['company'], + 'time': 'Tue Jan 13 2018 10:55:00 GMT+0000 (GMT)', + 'replies': [], + 'mailFolder': 'inbox', + 'unread': true + }, + { + 'id': 28, + 'sender': 'dmallallh@ask.com', + 'sender_name': 'کاظم فیاض', + 'to': ['johndoe@furl.net'], + 'img': require('@/assets/images/portrait/small/avatar-s-4.jpg'), + 'subject': ' سبد سرمایه گذاری', + 'cc': [], + 'bcc': [], + 'message': '

لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ، و با استفاده از طراحان گرافیک است، چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است، و برای شرایط فعلی تکنولوژی مورد نیاز، و کاربردهای متنوع با هدف بهبود ابزارهای کاربردی می باشد، کتابهای زیادی در شصت و سه درصد گذشته حال و آینده، شناخت فراوان جامعه و متخصصان را می طلبد، تا با نرم افزارها شناخت بیشتری را برای طراحان رایانه ای علی الخصوص طراحان خلاقی، و فرهنگ پیشرو در زبان فارسی ایجاد کرد، در این صورت می توان امید داشت که تمام و دشواری موجود در ارائه راهکارها، و شرایط سخت تایپ به پایان رسد و زمان مورد نیاز شامل حروفچینی دستاوردهای اصلی، و جوابگوی سوالات پیوسته اهل دنیای موجود طراحی اساسا مورد استفاده قرار گیرد.

', + + 'attachments': ['AdipiscingElit.ppt'], + 'isStarred': true, + 'labels': ['company'], + 'time': 'Tue Jan 14 2018 10:55:00 GMT+0000 (GMT)', + 'replies': [], + 'mailFolder': 'draft', + 'unread': true + }, + { + 'id': 29, + 'sender': 'nmacgaughyi@aol.com', + 'sender_name': 'مرتضی لندی', + 'to': ['johndoe@cnet.com'], + 'img': require('@/assets/images/portrait/small/avatar-s-18.jpg'), + 'subject': ' خاصی از بابت تایید اصالت سکه ', + 'cc': [], + 'bcc': [], + 'message': '

لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ، و با استفاده از طراحان گرافیک است، چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است، و برای شرایط فعلی تکنولوژی مورد نیاز، و کاربردهای متنوع با هدف بهبود ابزارهای کاربردی می باشد، کتابهای زیادی در شصت و سه درصد گذشته حال و آینده، شناخت فراوان جامعه و متخصصان را می طلبد، تا با نرم افزارها شناخت بیشتری را برای طراحان رایانه ای علی الخصوص طراحان خلاقی، و فرهنگ پیشرو در زبان فارسی ایجاد کرد، در این صورت می توان امید داشت که تمام و دشواری موجود در ارائه راهکارها، و شرایط سخت تایپ به پایان رسد و زمان مورد نیاز شامل حروفچینی دستاوردهای اصلی، و جوابگوی سوالات پیوسته اهل دنیای موجود طراحی اساسا مورد استفاده قرار گیرد.

', + + 'attachments': ['AnteIpsumPrimis.ppt'], + 'isStarred': false, + 'labels': ['private'], + 'time': 'Tue Jan 16 2018 10:55:00 GMT+0000 (GMT)', + 'replies': [], + 'mailFolder': 'trash', + 'unread': false + }, + { + 'id': 30, + 'sender': 'douldcottj@yellowpages.com', + 'sender_name': 'علی منتظر', + 'to': ['johndoe@github.io'], + 'img': require('@/assets/images/portrait/small/avatar-s-19.jpg'), + 'subject': 'ر حال انجام امور نهایی و تکمیل الحاقیه ', + 'cc': [], + 'bcc': [], + 'message': '

لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ، و با استفاده از طراحان گرافیک است، چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است، و برای شرایط فعلی تکنولوژی مورد نیاز، و کاربردهای متنوع با هدف بهبود ابزارهای کاربردی می باشد، کتابهای زیادی در شصت و سه درصد گذشته حال و آینده، شناخت فراوان جامعه و متخصصان را می طلبد، تا با نرم افزارها شناخت بیشتری را برای طراحان رایانه ای علی الخصوص طراحان خلاقی، و فرهنگ پیشرو در زبان فارسی ایجاد کرد، در این صورت می توان امید داشت که تمام و دشواری موجود در ارائه راهکارها، و شرایط سخت تایپ به پایان رسد و زمان مورد نیاز شامل حروفچینی دستاوردهای اصلی، و جوابگوی سوالات پیوسته اهل دنیای موجود طراحی اساسا مورد استفاده قرار گیرد.

', + + 'attachments': ['EratFermentum.mpeg'], + 'isStarred': true, + 'labels': ['personal'], + 'time': 'Tue Jan 17 2018 10:55:00 GMT+0000 (GMT)', + 'replies': [], + 'mailFolder': 'trash', + 'unread': false + } + ], + emailTags: [ + { + text: 'شخصی', + value : 'personal', + color:'success' + }, + { + text: 'سفارشات', + value: 'company', + color:'primary' + }, + { + text: 'فوری', + value: 'important', + color:'warning' + }, + { + text: 'مالی', + value: 'private', + color:'danger' + } + ] +} + +// GET : Emails +mock.onGet('api/apps/email/mails').reply((request) => { + + const filter = request.params.filter + + const filteredEmails = data.emails.filter((email) => { + + if (filter == 'inbox') return email.mailFolder === 'inbox' + if (filter === 'sent') return email.mailFolder === 'sent' + if (filter === 'draft') return email.mailFolder === 'draft' + if (filter === 'starred') return email.isStarred && email.mailFolder !== 'trash' + if (filter === 'trash') return email.mailFolder === 'trash' + if (filter === 'spam') return email.mailFolder === 'spam' + else return email.mailFolder != 'trash' && email.labels.includes(filter) + + }).reverse() + + return [200, JSON.parse(JSON.stringify(filteredEmails))] +}) + +// GET : Emails +mock.onGet('api/apps/email/tags').reply(() => { + return [200, data.emailTags] +}) + +// GET : Unread Mails +mock.onGet('/api/apps/email/meta').reply(() => { + + const countUnreadMailFolders = ['inbox', 'spam'] + + const meta = { + unreadMails: { + folder: {}, + label: {} + }, + draftMails: [] + } + + data.emails.forEach((mail) => { + + // Count unread mails + if (mail.unread) { + + // Add mail id + if (countUnreadMailFolders.includes(mail.mailFolder)) { + meta.unreadMails.folder[mail.mailFolder] ? meta.unreadMails.folder[mail.mailFolder].push(mail.id) : meta.unreadMails.folder[mail.mailFolder] = [mail.id] + } + + // Add mail id + mail.labels.forEach((label) => { + meta.unreadMails.label[label] ? meta.unreadMails.label[label].push(mail.id) : meta.unreadMails.label[label] = [mail.id] + }) + } + + // Get draft mail count + if (mail.mailFolder === 'draft') meta.draftMails.push(mail.id) + }) + + return [200, meta] +}) + + +// POST : Move Mails to another folder +mock.onPost('/api/apps/email/move-mails').reply((request) => { + const mailsToMove = JSON.parse(request.data).emailIds + + data.emails.forEach((mail) => { + if (mailsToMove.includes(mail.id)) mail.mailFolder = JSON.parse(request.data).mailFolder + }) + + return [200] +}) + +// POST : Update Mails Labels +mock.onPost('/api/apps/email/update-labels').reply((request) => { + + const label = JSON.parse(request.data).label + const mailsToUpdate = JSON.parse(request.data).emailIds + + mailsToUpdate.forEach((mailId) => { + const mailIndex = data.emails.findIndex((mail) => mail.id == mailId) + const labelIndex = data.emails[mailIndex].labels.indexOf(label) + + if (labelIndex == -1) { + data.emails[mailIndex].labels.push(label) + } else { + data.emails[mailIndex].labels.splice(labelIndex, 1) + } + }) + + return [200] +}) + +// POST : Set Mails Labels for single mail +mock.onPost('/api/apps/email/set-labels').reply((request) => { + const mailId = JSON.parse(request.data).mailId + data.emails.find((mail) => mail.id === mailId).labels = JSON.parse(request.data).labels + return [200] +}) + +// POST : Mark as Unread +mock.onPost('/api/apps/email/mark-unread').reply((request) => { + const mailsToUpdate = JSON.parse(request.data).emailIds + + mailsToUpdate.forEach((mailId) => { + const mailIndex = data.emails.findIndex((mail) => mail.id == mailId) + data.emails[mailIndex].unread = JSON.parse(request.data).unreadFlag + }) + + return [200] +}) + +// POST : Set starred +mock.onPost('/api/apps/email/set-starred').reply((request) => { + const mailId = JSON.parse(request.data).mailId + + data.emails.find((mail) => mail.id === mailId).isStarred = JSON.parse(request.data).value + + return [200] +}) + +// GET: Fetch Calendar Labels +// mock.onGet("api/apps/calendar/labels").reply(() => { +// return [200, data.labels] +// }) + +// POST: Update Event +// mock.onPost(/\/api\/apps\/calendar\/event\/\d+/).reply((request) => { + +// const eventId = request.url.substring(request.url.lastIndexOf("/")+1) + +// let event = data.events.find((event) => event.id == eventId) +// Object.assign(event, JSON.parse(request.data).event) + +// return [200, event] +// }) + +// DELETE: Remove Event +// mock.onDelete(/\/api\/apps\/calendar\/event\/\d+/).reply((request) => { + +// const eventId = request.url.substring(request.url.lastIndexOf("/")+1) + +// const eventIndex = data.events.findIndex((event) => event.id == eventId) +// data.events.splice(eventIndex, 1) +// return [200] +// }) + +// POST: Update Dragged Event +// mock.onPost(/\/api\/apps\/calendar\/event\/dragged\/\d+/).reply((request) => { + +// const eventId = request.url.substring(request.url.lastIndexOf("/")+1) +// let event = data.events.find((event) => event.id == eventId) +// const payload = JSON.parse(request.data).payload + +// const draggedDateStart = new Date(payload.date) + +// const eventStartDate = new Date(event.startDate).getTime() +// const eventEndDate = new Date(event.endDate).getTime() + +// const diff = draggedDateStart - eventStartDate +// const newEndDate = new Date(eventEndDate + diff) +// event.startDate = draggedDateStart +// event.endDate = newEndDate + +// return [200, event] +// }) diff --git a/src/fake-db/data/apps/index.js b/src/fake-db/data/apps/index.js new file mode 100644 index 0000000..472b2f3 --- /dev/null +++ b/src/fake-db/data/apps/index.js @@ -0,0 +1,4 @@ +import './chat/index.js' +import './calendar/index.js' +import './todo/index.js' +import './email/index.js' diff --git a/src/fake-db/data/apps/todo/index.js b/src/fake-db/data/apps/todo/index.js new file mode 100644 index 0000000..28e0e52 --- /dev/null +++ b/src/fake-db/data/apps/todo/index.js @@ -0,0 +1,198 @@ +import mock from '@/fake-db/mock.js' + +// Contact +const data = { + tasks: [ + { + 'id': 10, + 'title': 'Refactor Code', + 'desc': 'Pie liquorice wafer cotton candy danish. Icing topping jelly-o halvah pastry lollipop.', + 'isImportant': true, + 'isStarred': false, + 'tags': ['doc', 'backend'], + 'isCompleted': false, + 'isTrashed': false + }, + { + 'id': 11, + 'title': 'Submit Report', + 'desc': 'Donut tart toffee cake cookie gingerbread. Sesame snaps brownie sugar plum candy canes muffin cotton candy.', + 'isImportant': false, + 'isStarred': true, + 'tags': ['frontend', 'doc'], + 'isCompleted': false, + 'isTrashed': false + }, + { + 'id': 15, + 'title': 'Send PPT 🎁', + 'desc': 'Dragée gummi bears tiramisu brownie cookie. Jelly beans pudding marzipan fruitcake muffin. Wafer gummi bears lollipop pudding lollipop biscuit.', + 'isImportant': true, + 'isStarred': true, + 'tags': ['backend', 'doc'], + 'isCompleted': false, + 'isTrashed': false + }, + { + 'id': 18, + 'title': 'Skype Tommy', + 'desc': 'Tart oat cake sesame snaps lollipop croissant cake biscuit.', + 'isImportant': false, + 'isStarred': false, + 'tags': ['bug'], + 'isCompleted': true, + 'isTrashed': false + }, + { + 'id': 20, + 'title': 'Pick up Natasha 😁', + 'desc': 'Sweet roll toffee dragée cotton candy jelly beans halvah gingerbread jelly-o. Ice cream bear claw sugar plum powder.', + 'isImportant': true, + 'isStarred': true, + 'tags': [], + 'isCompleted': false, + 'isTrashed': false + }, + { + 'id': 23, + 'title': 'Meet Jane ❤️', + 'desc': 'Toffee sugar plum oat cake tiramisu tart bonbon gingerbread cheesecake cake. ', + 'isImportant': true, + 'isStarred': true, + 'tags': ['frontend', 'backend', 'doc'], + 'isCompleted': false, + 'isTrashed': false + }, + { + 'id': 25, + 'title': 'Promot Products', + 'desc': 'Gummi bears bear claw cake tiramisu gummies tiramisu apple pie chocolate jujubes. ', + 'isImportant': true, + 'isStarred': false, + 'tags': [], + 'isCompleted': false, + 'isTrashed': true + }, + { + 'id': 28, + 'title': 'Fix Project', + 'desc': 'Cookie fruitcake macaroon muffin apple pie chocolate bar toffee oat cake. Icing chocolate danish.', + 'isImportant': false, + 'isStarred': false, + 'tags': ['backend'], + 'isCompleted': false, + 'isTrashed': true + }, + { + 'id': 29, + 'title': 'Remove redundant files', + 'desc': 'Brownie jelly beans tootsie roll brownie marshmallow. Sesame snaps halvah marzipan chocolate cake. Icing bear claw pie apple pie.', + 'isImportant': false, + 'isStarred': false, + 'tags': [], + 'isCompleted': true, + 'isTrashed': true + }, + { + 'id': 33, + 'title': 'Fix Responsiveness 💻', + 'desc': 'Jelly topping toffee bear claw. Sesame snaps lollipop macaroon croissant cheesecake pastry cupcake.', + 'isImportant': true, + 'isStarred': false, + 'tags': ['frontend'], + 'isCompleted': false, + 'isTrashed': false + } + ], + taskTags: [ + { + id: 5, + text: 'Frontend', + value : 'frontend', + color: 'primary' + }, + { + id: 7, + text: 'Backend', + value: 'backend', + color: 'warning' + }, + { + id: 8, + text: 'Doc', + value: 'doc', + color: 'success' + }, + { + id: 11, + text: 'Bug', + value: 'bug', + color: 'danger' + } + ] +} + +// POST : Add new Tasks +mock.onPost('/api/apps/todo/tasks/').reply((request) => { + + // Get task from post data + const task = JSON.parse(request.data).task + + const length = data.tasks.length + let lastIndex = 0 + if (length) { + lastIndex = data.tasks[length - 1].id + } + task.id = lastIndex + 1 + + data.tasks.push(task) + + return [201, {id: task.id}] +}) + +// GET: Fetch Todos +mock.onGet('api/apps/todo/tasks').reply((request) => { + + const filter = request.params.filter + + const filteredTasks = data.tasks.filter((task) => { + + // If filter == all + if (filter === 'all') return !task.isTrashed + + // If filter == starred + if (filter === 'starred') return !task.isTrashed && task.isStarred + + // If filter == important + if (filter === 'important') return !task.isTrashed && task.isImportant + + // If filter == completed + if (filter === 'completed') return !task.isTrashed && task.isCompleted + + // If filter == trashed + if (filter === 'trashed') return task.isTrashed + + else return task.tags.includes(filter) + + }) + + + return [200, JSON.parse(JSON.stringify(filteredTasks)).reverse()] +}) + +// GET: Fetch tags +mock.onGet('api/apps/todo/tags').reply(() => { + return [200, JSON.parse(JSON.stringify(data.taskTags))] +}) + +// POST: Update Task +mock.onPost(/\/api\/apps\/todo\/task\/\d+/).reply((request) => { + + const taskId = request.url.substring(request.url.lastIndexOf('/') + 1) + + const task = data.tasks.find((task) => task.id == taskId) + // task.title = JSON.parse(request.data).task.title + Object.assign(task, JSON.parse(request.data).task) + + return [200, task] +}) diff --git a/src/fake-db/data/card/card-analytics.js b/src/fake-db/data/card/card-analytics.js new file mode 100644 index 0000000..5a9b1ba --- /dev/null +++ b/src/fake-db/data/card/card-analytics.js @@ -0,0 +1,279 @@ +import mock from '@/fake-db/mock.js' + +const data = { + subscribers_gained: { + analyticsData: [ + { + device: 'فعال', + icon: 'UserIcon', + color: 'primary', + sessionsPercentage: 58.6, + comparedResultPercentage: -2 + }, + { + device: 'نیمه فعال', + icon: 'UserMinusIcon', + color: 'warning', + sessionsPercentage: 34.9, + comparedResultPercentage: 8 + }, + { + device: 'غیر فعال', + icon: 'UserXIcon', + color: 'danger', + sessionsPercentage: 6.5, + comparedResultPercentage: -5 + } + ], + series: [58.6, 34.9, 6.5] + }, + productsOrders: { + analyticsData: [ + { + 'orderType': 'تمام شده', + 'counts': 23043, + 'color': 'primary' + }, + { + 'orderType': 'در حال پردازش', + 'counts': 14658, + 'color': 'warning' + }, + { + 'orderType': 'لغو شده ', + 'counts': 4758, + 'color': 'danger' + } + ], + series: [70, 52, 26] + }, + customers: { + analyticsData: [ + { + 'customerType': 'New', + 'counts': 890, + 'color': 'primary' + }, + { + 'customerType': 'Returning', + 'counts': 258, + 'color': 'warning' + }, + { + 'customerType': 'Referrals ', + 'counts': 149, + 'color': 'danger' + } + ], + series: [690, 258, 149] + }, + salesRadar: { + series: [ + { + name: 'Visits', + data: [90, 50, 86, 40, 100, 20] + }, + { + name: 'Sales', + data: [70, 75, 70, 76, 20, 85] + } + ] + }, + supportTracker: { + analyticsData: { + openTickets: 163, + meta: { + 'New Tickets': 29, + 'Open Tickets': 63, + 'Response Time': '1d' + } + }, + series: [83] + }, + revenueComparisonLine: { + analyticsData: { + thisMonth: 86589, + lastMonth: 73683 + }, + series: [ + { + name: 'ماه جاری', + data: [45000, 47000, 44800, 47500, 45500, 48000, 46500, 48600] + }, + { + name: 'ماه گذشته', + data: [46000, 48000, 45500, 46600, 44500, 46500, 45000, 47000] + } + ] + }, + goalOverviewRadialBar: { + analyticsData: { + completed: 786617, + inProgress: 13561 + }, + series: [83] + }, + salesBarSession: { + series: [ + { + name: 'Sessions', + data: [75, 125, 225, 175, 125, 75, 25] + } + ], + analyticsData: { + session: 2700, + comparison : { + str: 'Last 7 Days', + result: +5.2 + } + } + }, + todoToday: { + date: 'Sat, 16 Feb', + numCompletedTasks: 2, + totalTasks: 10, + tasksToday: [ + { + id: 3, + task: 'Refactor button component', + date: '16 Feb 2019' + }, + { + id: 70, + task: 'Submit report to admin', + date: '16 Feb 2019' + }, + { + id: 8, + task: 'Prepare presentation', + date: '16 Feb 2019' + }, + { + id: 1, + task: 'Calculate monthly income', + date: '16 Feb 2019' + } + ] + }, + salesLine: { + series: [ + { + name: 'Sales', + data: [140, 180, 150, 205, 160, 295, 125, 255, 205, 305, 240, 295] + } + ] + }, + funding: { + currBalance: 22597, + depostis: 20065, + comparison: { + resultPerc: 5.2, + pastData: 956 + }, + meta: { + earned: { + val: 56156, + progress: 50 + }, + duration: { + val: '2 Year', + progress: 50 + } + } + }, + browserAnalytics: [ + { + id: 1, + name: 'Google Chrome', + ratio: 73, + time: 'Mon Dec 10 2018 07:46:05 GMT+0000 (GMT)', + comparedResult: '800' + }, + { + id: 3, + name: 'Opera', + ratio: 8, + time: 'Mon Dec 10 2018 07:46:05 GMT+0000 (GMT)', + comparedResult: '-200' + }, + { + id: 2, + name: 'Firefox', + ratio: 19, + time: 'Mon Dec 10 2018 07:46:05 GMT+0000 (GMT)', + comparedResult: '100' + }, + { + id: 4, + name: 'Internet Explorer', + ratio: 27, + time: 'Mon Dec 10 2018 07:46:05 GMT+0000 (GMT)', + comparedResult: '-450' + } + ], + clientRetention: { + series: [ + { + name: 'تومان', + data: [175, 125, 225, 175, 160, 189, 206, 134, 159, 216, 148, 123] + }, + { + name: 'گرم', + data: [144, 155, 141, 167, 122, 143, 158, 107, 126, 131, 140, 137] + } + ] + } +} + + +mock.onGet('/api/card/card-analytics/session-by-device').reply(() => { + return [200, data.subscribers_gained] +}) + +mock.onGet('/api/card/card-analytics/products-orders').reply(() => { + return [200, data.productsOrders] +}) + +mock.onGet('/api/card/card-analytics/customers').reply(() => { + return [200, data.customers] +}) + +mock.onGet('/api/card/card-analytics/sales/radar').reply(() => { + return [200, data.salesRadar] +}) + +mock.onGet('/api/card/card-analytics/support-tracker').reply(() => { + return [200, data.supportTracker] +}) + +mock.onGet('/api/card/card-analytics/revenue-comparison').reply(() => { + return [200, data.revenueComparisonLine] +}) + +mock.onGet('/api/card/card-analytics/goal-overview').reply(() => { + return [200, data.goalOverviewRadialBar] +}) + +mock.onGet('/api/card/card-analytics/sales/bar').reply(() => { + return [200, data.salesBarSession] +}) + +mock.onGet('/api/card/card-analytics/todo/today').reply(() => { + return [200, data.todoToday] +}) + +mock.onGet('/api/card/card-analytics/sales/line').reply(() => { + return [200, data.salesLine] +}) + +mock.onGet('/api/card/card-analytics/funding').reply(() => { + return [200, data.funding] +}) + +mock.onGet('/api/card/card-analytics/browser-analytics').reply(() => { + return [200, data.browserAnalytics] +}) + +mock.onGet('/api/card/card-analytics/client-retention').reply(() => { + return [200, data.clientRetention] +}) diff --git a/src/fake-db/data/card/card-basic.js b/src/fake-db/data/card/card-basic.js new file mode 100644 index 0000000..b3aac8d --- /dev/null +++ b/src/fake-db/data/card/card-basic.js @@ -0,0 +1,188 @@ +import mock from '@/fake-db/mock.js' + +const data = { + pixinvent_product_1: { + img: require('@/assets/images/pages/content-img-1.jpg'), + title: 'Vuexy Admin', + subtitle: 'By Pixinvent Creative Studio', + subtitle_2: 'Elite Author' + }, + pixinvent_product_sales_1: { + img: require('@/assets/images/pages/content-img-2.jpg'), + title: 'Vuexy Admin', + subtitle: 'By Pixinvent Creative Studio', + footer_text_left_value: '$ 4785.78', + footer_text_left_label: 'Income', + footer_text_right_value: '12 June 2019', + footer_text_right_label: 'Release Date' + }, + pixinvent_product_goal_1: { + img: require('@/assets/images/pages/content-img-3.jpg'), + title: 'Vuexy Admin', + progress_done_per: 75, + current_progress: '$ 5975', + progress_goal: '$ 8000', + btn_left_text: 'Add More', + btn_right_text: 'Remove' + }, + user_detail_89: { + userImg: require('@/assets/images/portrait/small/avatar-s-12.jpg'), + name: 'Zoila Legore', + profession: 'Backend Dev', + btn_1_text: 'Follow', + btn_2_text: 'Message', + footer_text_1_icon: 'StarIcon', + footer_text_1: '4.9', + footer_text_2_icon: 'BriefcaseIcon', + footer_text_2: '37 Projects' + }, + user_detail_58: { + userImg: require('@/assets/images/portrait/small/avatar-s-12.jpg'), + name: 'Wilhelmina Jamal', + profession: 'Frontend Dev', + user_meta_1_title: 568, + user_meta_1_label: 'Uploads', + user_meta_2_title: '78.6K', + user_meta_2_label: 'Followers', + user_meta_3_title: 112, + user_meta_3_label: 'Following', + btn_text: 'Follow' + }, + user_detail_16: { + userImg: require('@/assets/images/portrait/small/avatar-s-1.jpg'), + name: 'Jonell Binion', + profession: 'Designer', + progress_done_per: 72, + current_progress: '720 Points', + progress_goal: '1000', + btn_left_text: 'Follow', + btn_right_text: 'Message' + }, + place_detail_18: { + overlay_img: require('@/assets/images/pages/card-image-6.jpg'), + title: 'Beautiful Overlay', + text: 'Cake sesame snaps cupcake gingerbread danish I love gingerbread. Apple pie pie jujubes chupa chups muffin halvah lollipop.' + }, + place_weather_76: { + overlay_img: require('@/assets/images/pages/card-image-5.jpg'), + place_name: 'New York', + weather: 'Snowy', + weather_icon: 'CloudSnowIcon', + temperature: -6, + meta: [ + { + label: 'Precipitation', + value: '48%' + }, + { + label: 'Humidity', + value: '60%' + }, + { + label: 'Wind', + value: '4823 km/h' + } + ] + }, + chatLog: [ + { + senderImg: require('@/assets/images/portrait/small/avatar-s-2.jpg'), + msg: 'Cake sesame snaps cupcake gingerbread', + isSent: false + }, + { + senderImg: require('@/assets/images/portrait/small/avatar-s-5.jpg'), + msg: 'Apple pie pie jujubes chupa chups muffin', + isSent: true + }, + { + senderImg: require('@/assets/images/portrait/small/avatar-s-2.jpg'), + msg: 'Chocolate cake', + isSent: false + }, + { + senderImg: require('@/assets/images/portrait/small/avatar-s-5.jpg'), + msg: 'Donut sweet pie oat cake dragée fruitcake', + isSent: true + }, + { + senderImg: require('@/assets/images/portrait/small/avatar-s-2.jpg'), + msg: 'Liquorice chocolate bar jelly beans icing', + isSent: false + }, + { + senderImg: require('@/assets/images/portrait/small/avatar-s-5.jpg'), + msg: 'Pudding candy', + isSent: true + } + ], + item_reviews_12: { + title: 'Vuexy Admin', + subtitle: 'by Pixinvent Creative Studio', + img: require('@/assets/images/pages/content-img-4.jpg'), + meta: { + likes: 368, + comments: 341, + dislikes: 53 + } + }, + player_options: { + height: '460', + fluid: true, + autoplay: false, + muted: true, + language: 'en', + playbackRates: [0.7, 1.0, 1.5, 2.0], + sources: [ + { + type: 'video/mp4', + src: 'http://vjs.zencdn.net/v/oceans.mp4' + } + ], + poster: 'https://goo.gl/xcCsDd' + } +} + +mock.onGet('/api/users/pixinvent/product/1').reply(() => { + return [200, data.pixinvent_product_1] +}) + +mock.onGet('/api/users/pixinvent/product/sales/1').reply(() => { + return [200, data.pixinvent_product_sales_1] +}) + +mock.onGet('/api/users/pixinvent/product/goals/1').reply(() => { + return [200, data.pixinvent_product_goal_1] +}) + +mock.onGet('/api/users/89').reply(() => { + return [200, data.user_detail_89] +}) + +mock.onGet('/api/users/58').reply(() => { + return [200, data.user_detail_58] +}) + +mock.onGet('/api/users/16').reply(() => { + return [200, data.user_detail_16] +}) + +mock.onGet('/api/place/18').reply(() => { + return [200, data.place_detail_18] +}) + +mock.onGet('/api/place/76/weather').reply(() => { + return [200, data.place_weather_76] +}) + +mock.onGet('/api/item/12/review').reply(() => { + return [200, data.item_reviews_12] +}) + +mock.onGet('/api/chat/demo-1/log').reply(() => { + return [200, data.chatLog] +}) + +mock.onGet('/api/card/card-basic/player-option').reply(() => { + return [200, data.player_options] +}) diff --git a/src/fake-db/data/card/card-statistics.js b/src/fake-db/data/card/card-statistics.js new file mode 100644 index 0000000..e116b15 --- /dev/null +++ b/src/fake-db/data/card/card-statistics.js @@ -0,0 +1,101 @@ +import mock from '@/fake-db/mock.js' + +const data = { + subscribers_gained: { + series: [ + { + name: 'فرد', + data: [28, 40, 36, 52, 38, 60, 55] + } + ], + analyticsData: { + subscribers: 92600 + } + }, + revenueGenerated: { + series: [ + { + name: 'هزار', + data: [350, 275, 400, 300, 350, 300, 450] + } + ], + analyticsData: { + revenue: 97500 + } + }, + quarterlySales: { + series: [ + { + name: 'گرم', + data: [10, 15, 7, 12, 3, 16] + } + ], + analyticsData: { + sales: '3600 گرم' + } + }, + ordersRecevied: { + series: [ + { + name: 'سفارش', + data: [10, 15, 8, 15, 7, 12, 8] + } + ], + analyticsData: { + orders: 97500 + } + }, + siteTraffic: { + series: [ + { + name: 'Traffic Rate', + data: [150, 200, 125, 225, 200, 250] + } + ] + }, + activeUsers: { + series: [ + { + name: 'Active Users', + data: [750, 1000, 900, 1250, 1000, 1200, 1100] + } + ] + }, + newsletter: { + series: [ + { + name: 'Newsletter', + data: [365, 390, 365, 400, 375, 400] + } + ] + } +} + + +mock.onGet('/api/card/card-statistics/subscribers').reply(() => { + return [200, data.subscribers_gained] +}) + +mock.onGet('/api/card/card-statistics/revenue').reply(() => { + return [200, data.revenueGenerated] +}) + +mock.onGet('/api/card/card-statistics/sales').reply(() => { + return [200, data.quarterlySales] +}) + +mock.onGet('/api/card/card-statistics/orders').reply(() => { + return [200, data.ordersRecevied] +}) + +mock.onGet('/api/card/card-statistics/site-traffic').reply(() => { + return [200, data.siteTraffic] +}) + +mock.onGet('/api/card/card-statistics/active-users').reply(() => { + return [200, data.activeUsers] +}) + +mock.onGet('/api/card/card-statistics/newsletter').reply(() => { + return [200, data.newsletter] +}) diff --git a/src/fake-db/data/card/index.js b/src/fake-db/data/card/index.js new file mode 100644 index 0000000..0ff2f7c --- /dev/null +++ b/src/fake-db/data/card/index.js @@ -0,0 +1,3 @@ +import './card-basic.js' +import './card-statistics.js' +import './card-analytics.js' diff --git a/src/fake-db/data/data-list/index.js b/src/fake-db/data/data-list/index.js new file mode 100644 index 0000000..90db831 --- /dev/null +++ b/src/fake-db/data/data-list/index.js @@ -0,0 +1,950 @@ +import mock from '@/fake-db/mock.js' + +const data = { + products: [ + { + 'id': 1, + 'category': 'computers', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/01.png', + 'name': 'Apple Watch series 4 GPS', + 'order_status': 'on_hold', + 'popularity': 97, + 'price': 69.99 + }, + { + 'id': 2, + 'category': 'fitness', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/02.png', + 'name': 'Beats HeadPhones', + 'order_status': 'delivered', + 'popularity': 83, + 'price': 69.99 + }, + { + 'id': 3, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/06.png', + 'name': 'Altec Lansing - Bluetooth Speaker', + 'order_status': 'canceled', + 'popularity': 57, + 'price': 199.99 + }, + { + 'id': 4, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/09.png', + 'name': 'Altec Lansing - Bluetooth Speaker', + 'order_status': 'delivered', + 'popularity': 65, + 'price': 199.99 + }, + { + 'id': 5, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/06.png', + 'name': 'Altec Lansing - Portable Bluetooth Speaker', + 'order_status': 'canceled', + 'popularity': 87, + 'price': 199.99 + }, + { + 'id': 6, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/09.png', + 'name': 'Altec Lansing - Bluetooth Speaker', + 'order_status': 'canceled', + 'popularity': 55, + 'price': 39.99 + }, + { + 'id': 7, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/02.png', + 'name': 'Altec Lansing - Mini H2O Bluetooth Speaker', + 'order_status': 'on_hold', + 'popularity': 99, + 'price': 39.99 + }, + { + 'id': 8, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/09.png', + 'name': 'Altec Lansing - Bluetooth Speaker', + 'order_status': 'canceled', + 'popularity': 91, + 'price': 39.99 + }, + { + 'id': 9, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/05.png', + 'name': 'Altec Lansing - Mini H2O Bluetooth Speaker', + 'order_status': 'delivered', + 'popularity': 52, + 'price': 39.99 + }, + { + 'id': 10, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/01.png', + 'name': 'Altec Lansing - Mini H2O Bluetooth Speaker', + 'order_status': 'canceled', + 'popularity': 64, + 'price': 39.99 + }, + { + 'id': 11, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/05.png', + 'name': 'Altec Lansing - Bluetooth Speaker', + 'order_status': 'canceled', + 'popularity': 93, + 'price': 99.99 + }, + { + 'id': 12, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/01.png', + 'name': 'Altec Lansing - Bluetooth Speaker', + 'order_status': 'pending', + 'popularity': 75, + 'price': 99.99 + }, + { + 'id': 13, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/01.png', + 'name': 'Altec Lansing - Bluetooth Speaker', + 'order_status': 'delivered', + 'popularity': 88, + 'price': 99.99 + }, + { + 'id': 14, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/09.png', + 'name': 'Altec Lansing - Bluetooth Speaker', + 'order_status': 'delivered', + 'popularity': 86, + 'price': 99.99 + }, + { + 'id': 15, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/05.png', + 'name': 'Aluratek - Bluetooth Audio Receiver', + 'order_status': 'on_hold', + 'popularity': 62, + 'price': 29.99 + }, + { + 'id': 16, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/04.png', + 'name': 'Aluratek - Bluetooth Audio Transmitter', + 'order_status': 'canceled', + 'popularity': 51, + 'price': 29.99 + }, + { + 'id': 17, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/07.png', + 'name': 'Aluratek - iStream Bluetooth Audio Receiver', + 'order_status': 'pending', + 'popularity': 51, + 'price': 29.99 + }, + { + 'id': 18, + 'category': 'computers', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/07.png', + 'name': 'Antec - Nano Diamond Thermal Compound', + 'order_status': 'on_hold', + 'popularity': 65, + 'price': 14.99 + }, + { + 'id': 19, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/05.png', + 'name': 'Antec - SmartBean Bluetooth Adapter', + 'order_status': 'on_hold', + 'popularity': 63, + 'price': 39.99 + }, + { + 'id': 20, + 'category': 'fitness', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/09.png', + 'name': 'Basis - Peak Fitness and Sleep Tracker', + 'order_status': 'on_hold', + 'popularity': 72, + 'price': 199.99 + }, + { + 'id': 21, + 'category': 'fitness', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/09.png', + 'name': 'Basis - Peak Fitness and Sleep Tracker', + 'order_status': 'canceled', + 'popularity': 77, + 'price': 199.99 + }, + { + 'id': 22, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/04.png', + 'name': 'Beats by Dr. Dre - 3\' USB-to-Micro USB Cable', + 'order_status': 'delivered', + 'popularity': 65, + 'price': 19.99 + }, + { + 'id': 23, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/02.png', + 'name': 'Beats by Dr. Dre - Bike Mount for Pill Speakers', + 'order_status': 'delivered', + 'popularity': 60, + 'price': 49.99 + }, + { + 'id': 24, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/06.png', + 'name': 'Beats by Dr. Dre - Support Stand for Speakers', + 'order_status': 'on_hold', + 'popularity': 59, + 'price': 49.99 + }, + { + 'id': 25, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/08.png', + 'name': 'Beats by Dr. Dre - Support Stand for Pill Speakers', + 'order_status': 'on_hold', + 'popularity': 87, + 'price': 49.99 + }, + { + 'id': 26, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/08.png', + 'name': 'Beats by Dr. Dre - Support Stand for Pill Speakers', + 'order_status': 'delivered', + 'popularity': 95, + 'price': 49.99 + }, + { + 'id': 27, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/07.png', + 'name': 'Beats by Dr. Dre - Support Stand for Speakers', + 'order_status': 'canceled', + 'popularity': 98, + 'price': 49.99 + }, + { + 'id': 28, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/04.png', + 'name': 'Beats by Dr. Dre - Support Stand', + 'order_status': 'delivered', + 'popularity': 75, + 'price': 49.99 + }, + { + 'id': 29, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/06.png', + 'name': 'Beats by Dr. Dre - Pill 2.0 Bluetooth Speaker', + 'order_status': 'pending', + 'popularity': 81, + 'price': 199.99 + }, + { + 'id': 30, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/07.png', + 'name': 'Beats by Dr. Dre - Pill 2.0 Bluetooth Speaker', + 'order_status': 'canceled', + 'popularity': 91, + 'price': 199.99 + }, + { + 'id': 31, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/04.png', + 'name': 'Beats by Dr. Dre - Bluetooth Speaker', + 'order_status': 'canceled', + 'popularity': 79, + 'price': 199.99 + }, + { + 'id': 32, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/09.png', + 'name': 'Beats by Dr. Dre - Portable Speaker + Headphones', + 'order_status': 'on_hold', + 'popularity': 95, + 'price': 699.99 + }, + { + 'id': 33, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/03.png', + 'name': 'Beats by Dr. Dre - Pill 2.0 Portable Stereo Speaker', + 'order_status': 'on_hold', + 'popularity': 90, + 'price': 199.99 + }, + { + 'id': 34, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/05.png', + 'name': 'Bose® - SoundLink® III Cover', + 'order_status': 'delivered', + 'popularity': 81, + 'price': 34.99 + }, + { + 'id': 35, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/08.png', + 'name': 'Bose® - Bose® SoundLink® III Cover', + 'order_status': 'delivered', + 'popularity': 81, + 'price': 34.99 + }, + { + 'id': 36, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/05.png', + 'name': 'Bose® - SoundLink® III Cover', + 'order_status': 'on_hold', + 'popularity': 69, + 'price': 34.99 + }, + { + 'id': 37, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/09.png', + 'name': 'Bose® - SoundLink® Mini Soft Cover', + 'order_status': 'canceled', + 'popularity': 95, + 'price': 24.99 + }, + { + 'id': 38, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/01.png', + 'name': 'Bose® - SoundLink® Color Bluetooth Speaker', + 'order_status': 'on_hold', + 'popularity': 100, + 'price': 129.99 + }, + { + 'id': 39, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/01.png', + 'name': 'Bose® - SoundLink® Color Bluetooth Speaker', + 'order_status': 'pending', + 'popularity': 89, + 'price': 129.99 + }, + { + 'id': 40, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/08.png', + 'name': 'Bose® - SoundLink® Color Bluetooth Speaker', + 'order_status': 'pending', + 'popularity': 75, + 'price': 129.99 + }, + { + 'id': 41, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/06.png', + 'name': 'Bose® - SoundLink® Color Bluetooth Speaker', + 'order_status': 'pending', + 'popularity': 54, + 'price': 129.99 + }, + { + 'id': 42, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/04.png', + 'name': 'Bose® - SoundLink® Color Bluetooth Speaker', + 'order_status': 'delivered', + 'popularity': 98, + 'price': 129.99 + }, + { + 'id': 43, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/09.png', + 'name': 'Bose® - SoundLink® Color Carry Case', + 'order_status': 'pending', + 'popularity': 95, + 'price': 24.99 + }, + { + 'id': 44, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/06.png', + 'name': 'Bose® - SoundLink® III Cover', + 'order_status': 'on_hold', + 'popularity': 76, + 'price': 34.99 + }, + { + 'id': 45, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/05.png', + 'name': 'Bose® - SoundLink® III Cover', + 'order_status': 'canceled', + 'popularity': 98, + 'price': 34.99 + }, + { + 'id': 46, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/05.png', + 'name': 'Bose® - SoundLink® III Cover', + 'order_status': 'pending', + 'popularity': 70, + 'price': 34.99 + }, + { + 'id': 47, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/08.png', + 'name': 'Bose® - Mini Bluetooth Speaker II', + 'order_status': 'pending', + 'popularity': 62, + 'price': 199.99 + }, + { + 'id': 48, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/02.png', + 'name': 'Bose® - Bluetooth Speaker II', + 'order_status': 'canceled', + 'popularity': 63, + 'price': 199.99 + }, + { + 'id': 49, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/05.png', + 'name': 'Bose® - SoundLink® Mini Bluetooth Speaker Soft Cover', + 'order_status': 'on_hold', + 'popularity': 90, + 'price': 24.99 + }, + { + 'id': 50, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/04.png', + 'name': 'Bose® - Bluetooth Speaker Soft Cover', + 'order_status': 'canceled', + 'popularity': 98, + 'price': 24.99 + }, + { + 'id': 51, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/09.png', + 'name': 'Bose® - Bluetooth Speaker Soft Cover', + 'order_status': 'on_hold', + 'popularity': 55, + 'price': 24.99 + }, + { + 'id': 52, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/09.png', + 'name': 'Bose® - Bluetooth Speaker', + 'order_status': 'pending', + 'popularity': 53, + 'price': 24.99 + }, + { + 'id': 53, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/09.png', + 'name': 'Bose® - SoundLink® Mini Bluetooth Speaker Soft Cover', + 'order_status': 'pending', + 'popularity': 82, + 'price': 24.99 + }, + { + 'id': 54, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/08.png', + 'name': 'Bose® - Bluetooth Speaker Travel Bag', + 'order_status': 'on_hold', + 'popularity': 78, + 'price': 44.99 + }, + { + 'id': 55, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/08.png', + 'name': 'Bose® - SoundLink® Mini Soft Cover', + 'order_status': 'canceled', + 'popularity': 81, + 'price': 24.99 + }, + { + 'id': 56, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/07.png', + 'name': 'Bose® - SoundLink® Mini Soft Cover', + 'order_status': 'pending', + 'popularity': 94, + 'price': 24.99 + }, + { + 'id': 57, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/09.png', + 'name': 'Bose® - Bluetooth Speaker III', + 'order_status': 'pending', + 'popularity': 97, + 'price': 299.99 + }, + { + 'id': 58, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/04.png', + 'name': 'Bose® - SoundLink® Soft Cover', + 'order_status': 'delivered', + 'popularity': 89, + 'price': 24.99 + }, + { + 'id': 59, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/02.png', + 'name': 'Bose® - Bluetooth Music Adapter', + 'order_status': 'on_hold', + 'popularity': 53, + 'price': 99.99 + }, + { + 'id': 60, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/04.png', + 'name': 'Bowers & Wilkins - Bluetooth Speaker', + 'order_status': 'canceled', + 'popularity': 79, + 'price': 349.98 + }, + { + 'id': 61, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/09.png', + 'name': 'BRAVEN - Balance Portable Bluetooth Speaker', + 'order_status': 'on_hold', + 'popularity': 82, + 'price': 129.99 + }, + { + 'id': 62, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/01.png', + 'name': 'BRAVEN - Balance Portable Bluetooth Speaker', + 'order_status': 'pending', + 'popularity': 80, + 'price': 129.99 + }, + { + 'id': 63, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/06.png', + 'name': 'BRAVEN - Outdoor Speaker', + 'order_status': 'pending', + 'popularity': 86, + 'price': 199.99 + }, + { + 'id': 64, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/03.png', + 'name': 'BRAVEN - BRV-X Outdoor Speaker', + 'order_status': 'pending', + 'popularity': 61, + 'price': 199.99 + }, + { + 'id': 65, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/09.png', + 'name': 'BRAVEN - Portable Bluetooth Speaker', + 'order_status': 'on_hold', + 'popularity': 85, + 'price': 299.99 + }, + { + 'id': 66, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/02.png', + 'name': 'BRAVEN - Portable Bluetooth Speaker', + 'order_status': 'on_hold', + 'popularity': 81, + 'price': 99.99 + }, + { + 'id': 67, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/01.png', + 'name': 'BRAVEN - Wireless Bluetooth Speaker', + 'order_status': 'on_hold', + 'popularity': 50, + 'price': 99.99 + }, + { + 'id': 68, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/02.png', + 'name': 'BRAVEN - Wireless Bluetooth Speaker', + 'order_status': 'delivered', + 'popularity': 93, + 'price': 99.99 + }, + { + 'id': 69, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/03.png', + 'name': 'BRAVEN - Wireless Bluetooth Speaker', + 'order_status': 'pending', + 'popularity': 51, + 'price': 99.99 + }, + { + 'id': 70, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/05.png', + 'name': 'Craig - Tower Speaker', + 'order_status': 'pending', + 'popularity': 77, + 'price': 69.99 + }, + { + 'id': 71, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/04.png', + 'name': 'Craig - Portable Wireless Speaker', + 'order_status': 'canceled', + 'popularity': 89, + 'price': 29.99 + }, + { + 'id': 72, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/09.png', + 'name': 'Definitive Technology - Wireless Speaker', + 'order_status': 'pending', + 'popularity': 81, + 'price': 399.98 + }, + { + 'id': 73, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/03.png', + 'name': 'Definitive Technology - Wireless Speaker', + 'order_status': 'pending', + 'popularity': 76, + 'price': 699.98 + }, + { + 'id': 74, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/08.png', + 'name': 'Denon - Wireless Speaker', + 'order_status': 'pending', + 'popularity': 88, + 'price': 399.98 + }, + { + 'id': 75, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/09.png', + 'name': 'Denon - HEOS 7 Wireless Speaker', + 'order_status': 'canceled', + 'popularity': 100, + 'price': 599.98 + }, + { + 'id': 76, + 'category': 'audio', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/02.png', + 'name': 'ECOXGEAR - Waterproof Bluetooth Speaker', + 'order_status': 'canceled', + 'popularity': 52, + 'price': 129.99 + }, + { + 'id': 77, + 'category': 'fitness', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/03.png', + 'name': 'Fitbit - Charge HR Activity Tracker + Heart Rate (Large)', + 'order_status': 'pending', + 'popularity': 66, + 'price': 149.99 + }, + { + 'id': 78, + 'category': 'fitness', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/01.png', + 'name': 'Fitbit - Charge HR Activity Tracker + Heart Rate (Large)', + 'order_status': 'delivered', + 'popularity': 66, + 'price': 149.99 + }, + { + 'id': 79, + 'category': 'fitness', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/09.png', + 'name': 'Fitbit - Activity Tracker + Heart Rate (Large)', + 'order_status': 'canceled', + 'popularity': 96, + 'price': 149.99 + }, + { + 'id': 80, + 'category': 'fitness', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/01.png', + 'name': 'Fitbit - Charge HR Activity Tracker + Heart Rate (Small)', + 'order_status': 'on_hold', + 'popularity': 92, + 'price': 149.99 + }, + { + 'id': 81, + 'category': 'fitness', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/09.png', + 'name': 'Fitbit - Charge HR Activity Tracker + Heart Rate (Small)', + 'order_status': 'delivered', + 'popularity': 82, + 'price': 149.99 + }, + { + 'id': 82, + 'category': 'fitness', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/01.png', + 'name': 'Fitbit - Activity Tracker + Heart Rate (Small)', + 'order_status': 'pending', + 'popularity': 100, + 'price': 149.99 + }, + { + 'id': 83, + 'category': 'fitness', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/01.png', + 'name': 'Fitbit - Activity Tracker + Sleep Wristband', + 'order_status': 'pending', + 'popularity': 100, + 'price': 149.99 + }, + { + 'id': 84, + 'category': 'fitness', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/02.png', + 'name': 'Fitbit - Activity Tracker (Large)', + 'order_status': 'pending', + 'popularity': 52, + 'price': 129.99 + }, + { + 'id': 85, + 'category': 'fitness', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/05.png', + 'name': 'Fitbit - Charge Wireless Activity Tracker (Large)', + 'order_status': 'on_hold', + 'popularity': 51, + 'price': 129.99 + }, + { + 'id': 86, + 'category': 'fitness', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/04.png', + 'name': 'Fitbit - Charge Wireless Activity Tracker (Large)', + 'order_status': 'pending', + 'popularity': 80, + 'price': 129.99 + }, + { + 'id': 87, + 'category': 'fitness', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/02.png', + 'name': 'Fitbit - Charge Wireless Activity Tracker (Small)', + 'order_status': 'on_hold', + 'popularity': 99, + 'price': 129.99 + }, + { + 'id': 88, + 'category': 'fitness', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/07.png', + 'name': 'Fitbit - Activity Tracker (Small)', + 'order_status': 'on_hold', + 'popularity': 75, + 'price': 129.99 + }, + { + 'id': 89, + 'category': 'fitness', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/07.png', + 'name': 'Fitbit - Charge Wireless Activity Tracker (Small)', + 'order_status': 'pending', + 'popularity': 80, + 'price': 129.99 + }, + { + 'id': 90, + 'category': 'fitness', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/07.png', + 'name': 'Fitbit - Charging Cable for Activity Trackers', + 'order_status': 'delivered', + 'popularity': 50, + 'price': 19.99 + }, + { + 'id': 91, + 'category': 'fitness', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/09.png', + 'name': 'Fitbit - Clip for Activity and Sleep Trackers', + 'order_status': 'delivered', + 'popularity': 57, + 'price': 14.99 + }, + { + 'id': 92, + 'category': 'fitness', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/05.png', + 'name': 'Fitbit - Clip for Wireless Activity and Sleep Trackers', + 'order_status': 'on_hold', + 'popularity': 80, + 'price': 14.99 + }, + { + 'id': 93, + 'category': 'fitness', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/03.png', + 'name': 'Fitbit - Clip for Zip Wireless Activity Trackers', + 'order_status': 'canceled', + 'popularity': 78, + 'price': 14.99 + }, + { + 'id': 94, + 'category': 'fitness', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/05.png', + 'name': 'Fitbit - Flex 1" USB Charging Cable', + 'order_status': 'on_hold', + 'popularity': 81, + 'price': 14.99 + }, + { + 'id': 95, + 'category': 'fitness', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/03.png', + 'name': 'Fitbit - Flex 1" USB Charging Cable', + 'order_status': 'canceled', + 'popularity': 51, + 'price': 14.99 + }, + { + 'id': 96, + 'category': 'fitness', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/03.png', + 'name': 'Fitbit - Flex Clasp for Activity Trackers', + 'order_status': 'canceled', + 'popularity': 56, + 'price': 4.99 + }, + { + 'id': 97, + 'category': 'fitness', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/07.png', + 'name': 'Fitbit - Sleep Wristband', + 'order_status': 'on_hold', + 'popularity': 95, + 'price': 99.99 + }, + { + 'id': 98, + 'category': 'fitness', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/09.png', + 'name': 'Fitbit - Sleep Tracker Wristband', + 'order_status': 'delivered', + 'popularity': 85, + 'price': 99.99 + }, + { + 'id': 99, + 'category': 'fitness', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/09.png', + 'name': 'Fitbit - Flex Wireless Activity', + 'order_status': 'pending', + 'popularity': 50, + 'price': 99.99 + }, + { + 'id': 100, + 'category': 'fitness', + 'img': 'https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/products/06.png', + 'name': 'Fitbit - Activity Tracker', + 'order_status': 'delivered', + 'popularity': 72, + 'price': 99.99 + } + ] +} + + +mock.onGet('/api/data-list/products').reply(() => { + return [200, JSON.parse(JSON.stringify(data.products)).reverse()] +}) + +// POST : Add new Item +mock.onPost('/api/data-list/products/').reply((request) => { + + // Get event from post data + const item = JSON.parse(request.data).item + + const length = data.products.length + let lastIndex = 0 + if (length) { + lastIndex = data.products[length - 1].id + } + item.id = lastIndex + 1 + + data.products.push(item) + + return [201, {id: item.id}] +}) + +// Update Product +mock.onPost(/\/api\/data-list\/products\/\d+/).reply((request) => { + + const itemId = request.url.substring(request.url.lastIndexOf('/') + 1) + + const item = data.products.find((item) => item.id == itemId) + Object.assign(item, JSON.parse(request.data).item) + + return [200, item] +}) + +// DELETE: Remove Item +mock.onDelete(/\/api\/data-list\/products\/\d+/).reply((request) => { + + const itemId = request.url.substring(request.url.lastIndexOf('/') + 1) + + const itemIndex = data.products.findIndex((p) => p.id == itemId) + data.products.splice(itemIndex, 1) + return [200] +}) diff --git a/src/fake-db/data/table/index.js b/src/fake-db/data/table/index.js new file mode 100644 index 0000000..469529d --- /dev/null +++ b/src/fake-db/data/table/index.js @@ -0,0 +1,123 @@ +import mock from '@/fake-db/mock.js' + +const data = { + dispatchedOrders: [ + { + orderNo: 879985, + status: 'تحویل داده شده', + statusColor: 'success', + operator: 'علی منتظر', + operatorImg: require('@/assets/images/portrait/small/avatar-s-2.jpg'), + usersLiked: [ + { + name: 'Vennie Mostowy', + img: require('@/assets/images/portrait/small/avatar-s-5.jpg') + }, + { + name: 'Elicia Rieske', + img: require('@/assets/images/portrait/small/avatar-s-7.jpg') + }, + { + name: 'Julee Rossignol', + img: require('@/assets/images/portrait/small/avatar-s-10.jpg') + }, + { + name: 'Darcey Nooner', + img: require('@/assets/images/portrait/small/avatar-s-8.jpg') + } + ], + location: 'علی ارزانی', + distance: '250000', + distPercent: 80, + startDate: '1399-01-29 10:25', + estDelDate: '28/07/2018' + }, + { + orderNo: 156897, + status: 'در حال پردازش', + statusColor: 'warning', + operator: 'احمد رضا شایسته', + operatorImg: require('@/assets/images/portrait/small/avatar-s-4.jpg'), + usersLiked: [ + { + name: 'Trina Lynes', + img: require('@/assets/images/portrait/small/avatar-s-1.jpg') + }, + { + name: 'Lilian Nenez', + img: require('@/assets/images/portrait/small/avatar-s-2.jpg') + }, + { + name: 'Alberto Glotzbach', + img: require('@/assets/images/portrait/small/avatar-s-3.jpg') + } + ], + location: 'علی ارزانی', + distance: '250000', + distPercent: 60, + startDate: '1399-01-29 10:25', + estDelDate: '28/07/2018' + }, + { + orderNo: 568975, + status: 'تحویل داده شده', + statusColor: 'success', + operator: 'محمد عباسی', + operatorImg: require('@/assets/images/portrait/small/avatar-s-1.jpg'), + usersLiked: [ + { + name: 'Lai Lewandowski', + img: require('@/assets/images/portrait/small/avatar-s-6.jpg') + }, + { + name: 'Elicia Rieske', + img: require('@/assets/images/portrait/small/avatar-s-7.jpg') + }, + { + name: 'Darcey Nooner', + img: require('@/assets/images/portrait/small/avatar-s-8.jpg') + }, + { + name: 'Julee Rossignol', + img: require('@/assets/images/portrait/small/avatar-s-10.jpg') + }, + { + name: 'Jeffrey Gerondale', + img: require('@/assets/images/portrait/small/avatar-s-9.jpg') + } + ], + location: 'محمد رضا شعبانی', + distance: '300000', + distPercent: 70, + startDate: '1399-01-29 10:25', + estDelDate: '28/07/2018' + }, + { + orderNo: 245689, + status: 'لغو شده', + statusColor: 'danger', + operator: 'علی منتظر', + operatorImg: require('@/assets/images/portrait/small/avatar-s-6.jpg'), + usersLiked: [ + { + name: 'Vennie Mostowy', + img: require('@/assets/images/portrait/small/avatar-s-5.jpg') + }, + { + name: 'Elicia Rieske', + img: require('@/assets/images/portrait/small/avatar-s-7.jpg') + } + ], + location: 'محمد رضا شعبانی', + distance: '300000', + distPercent: 95, + startDate: '1399-01-29 10:25', + estDelDate: '28/07/2018' + } + ] +} + + +mock.onGet('/api/table/dispatched-orders').reply(() => { + return [200, data.dispatchedOrders] +}) diff --git a/src/fake-db/data/user-management/index.js b/src/fake-db/data/user-management/index.js new file mode 100644 index 0000000..633be74 --- /dev/null +++ b/src/fake-db/data/user-management/index.js @@ -0,0 +1,706 @@ +import mock from '@/fake-db/mock.js' + +const data = { + users: [ + { + 'id': 268, + 'username': 'adoptionism744', + 'avatar': require('@/assets/images/portrait/small/avatar-s-3.jpg'), + 'email': 'angelo@sashington.com', + 'name': 'علی', + 'fname': 'منتظر', + 'dob': '28 January 1998', + 'gender': 'male', + 'country': 'Bolivia', + 'role': 'admin', + 'status': 'active', + 'is_verified': true, + 'department': 'sales', + 'company': 'WinDon Technologies Pvt Ltd', + 'mobile': '+65958951757', + 'website': 'https://rowboat.com/insititious/Angelo', + 'languages_known': ['English', 'Arabic'], + 'contact_options': ['email', 'message', 'phone'], + 'location': { + 'add_line_1': 'A-65, Belvedere Streets', + 'add_line_2': '', + 'post_code': '1868', + 'city': 'New York', + 'state': 'New York', + 'country': 'United States' + }, + 'social_links': { + 'twitter': 'https://twitter.com/adoptionism744', + 'facebook': 'https://www.facebook.com/adoptionism664', + 'instagram': 'https://www.instagram.com/adopt-ionism744/', + 'github': 'https://github.com/madop818', + 'codepen': 'https://codepen.io/adoptism243', + 'slack': '@adoptionism744' + }, + 'permissions': { + 'users': { + 'read': true, + 'write': false, + 'create': false, + 'delete': false + }, + 'posts': { + 'read': true, + 'write': true, + 'create': true, + 'delete': true + }, + 'comments': { + 'read': true, + 'write': false, + 'create': true, + 'delete': false + } + + } + }, + { + 'id': 269, + 'username': 'demodulation463', + 'avatar': require('@/assets/images/portrait/small/avatar-s-2.jpg'), + 'email': 'rubi@ortwein.com', + 'name': 'Rubi Ortwein', + 'country': 'Syria', + 'role': 'user', + 'status': 'blocked', + 'is_verified': false, + 'department': 'development' + }, + { + 'id': 270, + 'username': 'undivorced341', + 'avatar': require('@/assets/images/portrait/small/avatar-s-3.jpg'), + 'email': 'donnette@charania.com', + 'name': 'Donnette Charania', + 'country': 'Iraq', + 'role': 'staff', + 'status': 'deactivated', + 'is_verified': true, + 'department': 'sales' + }, + { + 'id': 271, + 'username': 'bumbo426', + 'avatar': require('@/assets/images/portrait/small/avatar-s-12.jpg'), + 'email': 'ardith@duffett.com', + 'name': 'Ardith Duffett', + 'country': 'Estonia', + 'role': 'user', + 'status': 'active', + 'is_verified': false, + 'department': 'sales' + }, + { + 'id': 272, + 'username': 'ectodactylism214', + 'avatar': require('@/assets/images/portrait/small/avatar-s-16.jpg'), + 'email': 'antone@berman.com', + 'name': 'Antone Berman', + 'country': 'India', + 'role': 'user', + 'status': 'blocked', + 'is_verified': true, + 'department': 'sales' + }, + { + 'id': 273, + 'username': 'panathenaic825', + 'avatar': require('@/assets/images/portrait/small/avatar-s-18.jpg'), + 'email': 'maryann@gour.com', + 'name': 'Maryann Gour', + 'country': 'Solomon Islands', + 'role': 'user', + 'status': 'active', + 'is_verified': true, + 'department': 'sales' + }, + { + 'id': 274, + 'username': 'reptilious612', + 'avatar': require('@/assets/images/portrait/small/avatar-s-7.jpg'), + 'email': 'holli@vanduyne.com', + 'name': 'Holli Vanduyne', + 'country': 'Lebanon', + 'role': 'staff', + 'status': 'active', + 'is_verified': true, + 'department': 'sales' + }, + { + 'id': 275, + 'username': 'candid910', + 'avatar': require('@/assets/images/portrait/small/avatar-s-26.jpg'), + 'email': 'juanita@sartoris.com', + 'name': 'Juanita Sartoris', + 'country': 'Papua New Guinea', + 'role': 'staff', + 'status': 'active', + 'is_verified': true, + 'department': 'management' + }, + { + 'id': 276, + 'username': 'ferrotungsten928', + 'avatar': require('@/assets/images/portrait/small/avatar-s-20.jpg'), + 'email': 'lia@morga.com', + 'name': 'Lia Morga', + 'country': 'Malaysia', + 'role': 'user', + 'status': 'active', + 'is_verified': true, + 'department': 'development' + }, + { + 'id': 277, + 'username': 'fibered345', + 'avatar': require('@/assets/images/portrait/small/avatar-s-14.jpg'), + 'email': 'theo@quatrevingt.com', + 'name': 'Theo Quatrevingt', + 'country': 'Nepal', + 'role': 'user', + 'status': 'active', + 'is_verified': true, + 'department': 'sales' + }, + { + 'id': 278, + 'username': 'nonenclosure246', + 'avatar': require('@/assets/images/portrait/small/avatar-s-10.jpg'), + 'email': 'lynwood@flud.com', + 'name': 'Lynwood Flud', + 'country': 'Russia', + 'role': 'user', + 'status': 'active', + 'is_verified': true, + 'department': 'sales' + }, + { + 'id': 279, + 'username': 'uncandied531', + 'avatar': require('@/assets/images/portrait/small/avatar-s-13.jpg'), + 'email': 'kaitlin@kahola.com', + 'name': 'Kaitlin Kahola', + 'country': 'Latvia', + 'role': 'user', + 'status': 'active', + 'is_verified': true, + 'department': 'sales' + }, + { + 'id': 280, + 'username': 'errancy403', + 'avatar': require('@/assets/images/portrait/small/avatar-s-4.jpg'), + 'email': 'alvin@car.com', + 'name': 'Alvin Car', + 'country': 'Yemen', + 'role': 'admin', + 'status': 'active', + 'is_verified': true, + 'department': 'sales' + }, + { + 'id': 281, + 'username': 'renillidae759', + 'avatar': require('@/assets/images/portrait/small/avatar-s-16.jpg'), + 'email': 'justin@jacquelin.com', + 'name': 'Justin Jacquelin', + 'country': 'Turkmenistan', + 'role': 'user', + 'status': 'blocked', + 'is_verified': true, + 'department': 'management' + }, + { + 'id': 282, + 'username': 'jellylike89', + 'avatar': require('@/assets/images/portrait/small/avatar-s-20.jpg'), + 'email': 'chloe@tague.com', + 'name': 'Chloe Tague', + 'country': 'Pakistan', + 'role': 'staff', + 'status': 'active', + 'is_verified': true, + 'department': 'development' + }, + { + 'id': 283, + 'username': 'ocular772', + 'avatar': require('@/assets/images/portrait/small/avatar-s-6.jpg'), + 'email': 'zola@tauarez.com', + 'name': 'Zola Tauarez', + 'country': 'Dominica', + 'role': 'admin', + 'status': 'deactivated', + 'is_verified': true, + 'department': 'sales' + }, + { + 'id': 284, + 'username': 'oxgang923', + 'avatar': require('@/assets/images/portrait/small/avatar-s-11.jpg'), + 'email': 'wm@cieszynski.com', + 'name': 'Wm Cieszynski', + 'country': 'South Korea', + 'role': 'user', + 'status': 'active', + 'is_verified': true, + 'department': 'sales' + }, + { + 'id': 285, + 'username': 'ideationally882', + 'avatar': require('@/assets/images/portrait/small/avatar-s-1.jpg'), + 'email': 'hope@mobus.com', + 'name': 'Hope Mobus', + 'country': 'United States of America', + 'role': 'user', + 'status': 'active', + 'is_verified': true, + 'department': 'sales' + }, + { + 'id': 286, + 'username': 'cynomorphous587', + 'avatar': require('@/assets/images/portrait/small/avatar-s-25.jpg'), + 'email': 'lee@wernimont.com', + 'name': 'Lee Wernimont', + 'country': 'South Africa', + 'role': 'admin', + 'status': 'active', + 'is_verified': true, + 'department': 'development' + }, + { + 'id': 287, + 'username': 'windtight501', + 'avatar': require('@/assets/images/portrait/small/avatar-s-3.jpg'), + 'email': 'myesha@denman.com', + 'name': 'Myesha Denman', + 'country': 'Cyprus', + 'role': 'staff', + 'status': 'active', + 'is_verified': true, + 'department': 'sales' + }, + { + 'id': 288, + 'username': 'strongylate147', + 'avatar': require('@/assets/images/portrait/small/avatar-s-21.jpg'), + 'email': 'cornell@roszell.com', + 'name': 'Cornell Roszell', + 'country': 'Algeria', + 'role': 'admin', + 'status': 'active', + 'is_verified': true, + 'department': 'development' + }, + { + 'id': 289, + 'username': 'reblade348', + 'avatar': require('@/assets/images/portrait/small/avatar-s-6.jpg'), + 'email': 'vernon@ogrodowicz.com', + 'name': 'Vernon Ogrodowicz', + 'country': 'Botswana', + 'role': 'admin', + 'status': 'deactivated', + 'is_verified': true, + 'department': 'sales' + }, + { + 'id': 290, + 'username': 'trapping909', + 'avatar': require('@/assets/images/portrait/small/avatar-s-26.jpg'), + 'email': 'rosy@litza.com', + 'name': 'Rosy Litza', + 'country': 'Iran', + 'role': 'staff', + 'status': 'active', + 'is_verified': true, + 'department': 'development' + }, + { + 'id': 291, + 'username': 'associatedness456', + 'avatar': require('@/assets/images/portrait/small/avatar-s-16.jpg'), + 'email': 'carl@lano.com', + 'name': 'Carl Lano', + 'country': 'Japan', + 'role': 'user', + 'status': 'blocked', + 'is_verified': true, + 'department': 'sales' + }, + { + 'id': 292, + 'username': 'deformable333', + 'avatar': require('@/assets/images/portrait/small/avatar-s-5.jpg'), + 'email': 'jamika@overlee.com', + 'name': 'Jamika Overlee', + 'country': 'Colombia', + 'role': 'admin', + 'status': 'active', + 'is_verified': true, + 'department': 'sales' + }, + { + 'id': 293, + 'username': 'abaptiston684', + 'avatar': require('@/assets/images/portrait/small/avatar-s-10.jpg'), + 'email': 'lyle@pytko.com', + 'name': 'Lyle Pytko', + 'country': 'Somalia', + 'role': 'user', + 'status': 'active', + 'is_verified': true, + 'department': 'management' + }, + { + 'id': 294, + 'username': 'neglector719', + 'avatar': require('@/assets/images/portrait/small/avatar-s-20.jpg'), + 'email': 'latoria@josef.com', + 'name': 'Latoria Josef', + 'country': 'Lithuania', + 'role': 'staff', + 'status': 'active', + 'is_verified': true, + 'department': 'development' + }, + { + 'id': 295, + 'username': 'perameloid596', + 'avatar': require('@/assets/images/portrait/small/avatar-s-18.jpg'), + 'email': 'tennille@draft.com', + 'name': 'Tennille Draft', + 'country': 'Somalia', + 'role': 'user', + 'status': 'active', + 'is_verified': true, + 'department': 'sales' + }, + { + 'id': 296, + 'username': 'fetoplacental529', + 'avatar': require('@/assets/images/portrait/small/avatar-s-20.jpg'), + 'email': 'bernadette@ludovici.com', + 'name': 'Bernadette Ludovici', + 'country': 'Cameroon', + 'role': 'user', + 'status': 'active', + 'is_verified': true, + 'department': 'development' + }, + { + 'id': 297, + 'username': 'interdiffusion271', + 'avatar': require('@/assets/images/portrait/small/avatar-s-8.jpg'), + 'email': 'mui@melching.com', + 'name': 'Mui Melching', + 'country': 'Iran', + 'role': 'user', + 'status': 'active', + 'is_verified': true, + 'department': 'sales' + }, + { + 'id': 298, + 'username': 'vernacularize342', + 'avatar': require('@/assets/images/portrait/small/avatar-s-18.jpg'), + 'email': 'mitsue@houlahan.com', + 'name': 'Mitsue Houlahan', + 'country': 'Malawi', + 'role': 'user', + 'status': 'active', + 'is_verified': true, + 'department': 'sales' + }, + { + 'id': 299, + 'username': 'sassenach8', + 'avatar': require('@/assets/images/portrait/small/avatar-s-6.jpg'), + 'email': 'elsa@neubert.com', + 'name': 'Elsa Neubert', + 'country': 'Togo', + 'role': 'staff', + 'status': 'deactivated', + 'is_verified': true, + 'department': 'sales' + }, + { + 'id': 300, + 'username': 'diplantidian91', + 'avatar': require('@/assets/images/portrait/small/avatar-s-19.jpg'), + 'email': 'kandice@mizelle.com', + 'name': 'Kandice Mizelle', + 'country': 'Greece', + 'role': 'user', + 'status': 'active', + 'is_verified': true, + 'department': 'sales' + }, + { + 'id': 301, + 'username': 'precognizant796', + 'avatar': require('@/assets/images/portrait/small/avatar-s-22.jpg'), + 'email': 'damian@hayzlett.com', + 'name': 'Damian Hayzlett', + 'country': 'St. Lucia', + 'role': 'staff', + 'status': 'active', + 'is_verified': true, + 'department': 'management' + }, + { + 'id': 302, + 'username': 'submaster902', + 'avatar': require('@/assets/images/portrait/small/avatar-s-16.jpg'), + 'email': 'aundrea@stempel.com', + 'name': 'Aundrea Stempel', + 'country': 'Cyprus', + 'role': 'user', + 'status': 'blocked', + 'is_verified': true, + 'department': 'sales' + }, + { + 'id': 303, + 'username': 'ladytide97', + 'avatar': require('@/assets/images/portrait/small/avatar-s-21.jpg'), + 'email': 'shiloh@spielmaker.com', + 'name': 'Shiloh Spielmaker', + 'country': 'Palestine', + 'role': 'user', + 'status': 'active', + 'is_verified': true, + 'department': 'development' + }, + { + 'id': 304, + 'username': 'prayingly678', + 'avatar': require('@/assets/images/portrait/small/avatar-s-24.jpg'), + 'email': 'terese@dyreson.com', + 'name': 'Terese Dyreson', + 'country': 'Sao Tome and Principe', + 'role': 'user', + 'status': 'active', + 'is_verified': true, + 'department': 'management' + }, + { + 'id': 305, + 'username': 'unclotted302', + 'avatar': require('@/assets/images/portrait/small/avatar-s-6.jpg'), + 'email': 'vashti@kilton.com', + 'name': 'Vashti Kilton', + 'country': 'Portugal', + 'role': 'user', + 'status': 'deactivated', + 'is_verified': true, + 'department': 'sales' + }, + { + 'id': 306, + 'username': 'unfascinating985', + 'avatar': require('@/assets/images/portrait/small/avatar-s-19.jpg'), + 'email': 'carter@mendes.com', + 'name': 'Carter Mendes', + 'country': 'Armenia', + 'role': 'user', + 'status': 'active', + 'is_verified': true, + 'department': 'sales' + }, + { + 'id': 307, + 'username': 'gardenwise712', + 'avatar': require('@/assets/images/portrait/small/avatar-s-24.jpg'), + 'email': 'helene@madden.com', + 'name': 'Helene Madden', + 'country': 'Finland', + 'role': 'staff', + 'status': 'active', + 'is_verified': true, + 'department': 'development' + }, + { + 'id': 308, + 'username': 'interagree870', + 'avatar': require('@/assets/images/portrait/small/avatar-s-13.jpg'), + 'email': 'ashton@calderone.com', + 'name': 'Ashton Calderone', + 'country': 'Italy', + 'role': 'user', + 'status': 'active', + 'is_verified': true, + 'department': 'sales' + }, + { + 'id': 309, + 'username': 'brutification848', + 'avatar': require('@/assets/images/portrait/small/avatar-s-14.jpg'), + 'email': 'robert@lyster.com', + 'name': 'Robert Lyster', + 'country': 'Turkey', + 'role': 'user', + 'status': 'active', + 'is_verified': true, + 'department': 'sales' + }, + { + 'id': 310, + 'username': 'unhypocritically536', + 'avatar': require('@/assets/images/portrait/small/avatar-s-22.jpg'), + 'email': 'delma@mewbourn.com', + 'name': 'Delma Mewbourn', + 'country': 'Honduras', + 'role': 'staff', + 'status': 'deactivated', + 'is_verified': false, + 'department': 'development' + }, + { + 'id': 311, + 'username': 'tarentine951', + 'avatar': require('@/assets/images/portrait/small/avatar-s-17.jpg'), + 'email': 'ja@alaibilla.com', + 'name': 'Ja Alaibilla', + 'country': 'Italy', + 'role': 'user', + 'status': 'active', + 'is_verified': true, + 'department': 'sales' + }, + { + 'id': 312, + 'username': 'mountainlike2', + 'avatar': require('@/assets/images/portrait/small/avatar-s-22.jpg'), + 'email': 'delinda@rosentrance.com', + 'name': 'Delinda Rosentrance', + 'country': 'Guinea', + 'role': 'user', + 'status': 'active', + 'is_verified': true, + 'department': 'development' + }, + { + 'id': 313, + 'username': 'zoetic150', + 'avatar': require('@/assets/images/portrait/small/avatar-s-18.jpg'), + 'email': 'danae@demeter.com', + 'name': 'Danae Demeter', + 'country': 'Gambia', + 'role': 'user', + 'status': 'deactivated', + 'is_verified': true, + 'department': 'sales' + }, + { + 'id': 314, + 'username': 'addlepate37', + 'avatar': require('@/assets/images/portrait/small/avatar-s-14.jpg'), + 'email': 'kattie@joffrion.com', + 'name': 'Kattie Joffrion', + 'country': 'Albania', + 'role': 'user', + 'status': 'blocked', + 'is_verified': true, + 'department': 'management' + }, + { + 'id': 315, + 'username': 'pollinate51', + 'avatar': require('@/assets/images/portrait/small/avatar-s-19.jpg'), + 'email': 'in@stjohns.com', + 'name': 'In Stjohns', + 'country': 'North Korea', + 'role': 'user', + 'status': 'active', + 'is_verified': false, + 'department': 'sales' + }, + { + 'id': 316, + 'username': 'tournefortian626', + 'avatar': require('@/assets/images/portrait/small/avatar-s-2.jpg'), + 'email': 'van@laferney.com', + 'name': 'Van Laferney', + 'country': 'Finland', + 'role': 'staff', + 'status': 'active', + 'is_verified': true, + 'department': 'development' + }, + { + 'id': 317, + 'username': 'aspersively497', + 'avatar': require('@/assets/images/portrait/small/avatar-s-6.jpg'), + 'email': 'sylvia@maharrey.com', + 'name': 'Sylvia Maharrey', + 'country': 'Turkmenistan', + 'role': 'staff', + 'status': 'deactivated', + 'is_verified': true, + 'department': 'sales' + } + + ] +} + + +mock.onGet('/api/user-management/users').reply(() => { + return [200, JSON.parse(JSON.stringify(data.users)).reverse()] +}) + +// GET: Fetch Single User Details +mock.onGet(/\/api\/user-management\/users\/\d+/).reply((request) => { + + const userId = request.url.substring(request.url.lastIndexOf('/') + 1) + + const user = data.users.find((user) => user.id == userId) + + return user ? [200, JSON.parse(JSON.stringify(user))] : [404] +}) + +// // POST : Add new Item +// mock.onPost("/api/data-list/products/").reply((request) => { + +// // Get event from post data +// let item = JSON.parse(request.data).item + +// const length = data.products.length +// let lastIndex = 0 +// if(length){ +// lastIndex = data.products[length - 1].id +// } +// item.id = lastIndex + 1 + +// data.products.push(item) + +// return [201, {id: item.id}] +// }) + +// // Update Product +// mock.onPost(/\/api\/data-list\/products\/\d+/).reply((request) => { + +// const itemId = request.url.substring(request.url.lastIndexOf("/")+1) + +// let item = data.products.find((item) => item.id == itemId) +// Object.assign(item, JSON.parse(request.data).item) + +// return [200, item] +// }) + +// // DELETE: Remove Item +mock.onDelete(/\/api\/user-management\/users\/\d+/).reply((request) => { + + const userId = request.url.substring(request.url.lastIndexOf('/') + 1) + + const itemIndex = data.users.findIndex((p) => p.id == userId) + data.users.splice(itemIndex, 1) + return [200] +}) diff --git a/src/fake-db/data/user/index.js b/src/fake-db/data/user/index.js new file mode 100644 index 0000000..fccabc2 --- /dev/null +++ b/src/fake-db/data/user/index.js @@ -0,0 +1,135 @@ +import mock from '@/fake-db/mock.js' +import jwt from 'jsonwebtoken' + +const data = { + checkpointReward: { + userName: 'John', + progress: '57.6%' + }, + users: [ + { + uid: 34, + displayName: 'Howard Potts', + password: 'adminadmin', + photoURL: require('@/assets/images/portrait/small/avatar-s-5.jpg'), + email: 'admin@admin.com', + phoneNumber: null + } + ] +} + + +const jwtConfig = { + 'secret' : 'dd5f3089-40c3-403d-af14-d0c228b05cb4', + 'expireTime': 8000 +} + + +mock.onPost('/api/auth/login').reply((request) => { + const {email, password} = JSON.parse(request.data) + + let error = 'Something went wrong' + + const user = data.users.find(user => user.email === email && user.password === password) + + if (user) { + + try { + + const accessToken = jwt.sign({id: user.uid}, jwtConfig.secret, {expiresIn: jwtConfig.expireTime}) + + const userData = Object.assign({}, user, {providerId: 'jwt'}) + + delete userData.password + + const response = { + userData, + accessToken + } + + return [200, response] + + } catch (e) { + error = e + } + } else { + error = 'Email Or Password Invalid' + } + + return [200, {error}] + + +}) + +mock.onPost('/api/auth/register').reply((request) => { + const {displayName, email, password} = JSON.parse(request.data) + const isEmailAlreadyInUse = data.users.find((user) => user.email === email) + const error = { + email : isEmailAlreadyInUse ? 'This email is already in use.' : null, + displayName: displayName === '' ? 'Please enter your name.' : null + } + + if (!error.displayName && !error.email) { + + const userData = { + email, + password, + displayName, + photoURL: require('@/assets/images/portrait/small/avatar-s-5.jpg'), + phoneNumber: null + } + + // Add user id + const length = data.users.length + let lastIndex = 0 + if (length) { + lastIndex = data.users[length - 1].uid + } + userData.uid = lastIndex + 1 + + data.users.push(userData) + + const accessToken = jwt.sign({id: userData.uid}, jwtConfig.secret, {expiresIn: jwtConfig.expireTime}) + + const user = Object.assign({}, userData) + delete user['password'] + const response = { + userData: user, + accessToken + } + + return [200, response] + } else { + return [200, {error}] + } +}) + + +mock.onPost('/api/auth/refresh-token').reply((request) => { + + const {accessToken} = JSON.parse(request.data) + + try { + const {id} = jwt.verify(accessToken, jwtConfig.secret) + + const userData = Object.assign({}, data.users.find(user => user.uid === id)) + + const newAccessToken = jwt.sign({id: userData.uid}, jwtConfig.secret, {expiresIn: jwtConfig.expiresIn}) + + delete userData['password'] + const response = { + userData, + accessToken: newAccessToken + } + + return [200, response] + } catch (e) { + const error = 'Invalid access token' + return [401, {error}] + } +}) + + +mock.onGet('/api/user/checkpoint-reward').reply(() => { + return [200, data.checkpointReward] +}) diff --git a/src/fake-db/index.js b/src/fake-db/index.js new file mode 100644 index 0000000..971975d --- /dev/null +++ b/src/fake-db/index.js @@ -0,0 +1,13 @@ +import mock from './mock' + + +import './data/card/index.js' +import './data/table/index.js' +import './data/data-list/index.js' +import './data/user-management/index.js' +import './data/user/index.js' + +// Apps +import './data/apps/index.js' + +mock.onAny().passThrough() // forwards the matched request over network diff --git a/src/fake-db/mock.js b/src/fake-db/mock.js new file mode 100644 index 0000000..658b7d8 --- /dev/null +++ b/src/fake-db/mock.js @@ -0,0 +1,5 @@ +import axios from '@/axios.js' +const MockAdapter = require('axios-mock-adapter') +const mock = new MockAdapter(axios) // This sets the mock adapter on the default instance + +export default mock diff --git a/src/filters/filters.js b/src/filters/filters.js new file mode 100644 index 0000000..6dd2a5f --- /dev/null +++ b/src/filters/filters.js @@ -0,0 +1,108 @@ +import Vue from 'vue' +import moment from 'moment-jalaali'; + +Vue.filter('capitalize', function (value) { + if (!value) return '' + value = value.toString() + const arr = value.split(' ') + const capitalized_array = [] + arr.forEach((word) => { + const capitalized = word.charAt(0).toUpperCase() + word.slice(1) + capitalized_array.push(capitalized) + }) + return capitalized_array.join(' ') +}) + +Vue.filter('title', function (value, replacer = '_') { + if (!value) return '' + value = value.toString() + + const arr = value.split(replacer) + const capitalized_array = [] + arr.forEach((word) => { + const capitalized = word.charAt(0).toUpperCase() + word.slice(1) + capitalized_array.push(capitalized) + }) + return capitalized_array.join(' ') +}) + +Vue.filter('truncate', function (value, limit) { + return value.substring(0, limit) +}) + +Vue.filter('tailing', function (value, tail) { + return value + tail +}) + +Vue.filter('time', function (value, is24HrFormat = false) { + if (value) { + const date = new Date(Date.parse(value)) + let hours = date.getHours() + const min = (date.getMinutes() < 10 ? '0' : '') + date.getMinutes() + if (!is24HrFormat) { + const time = hours > 12 ? 'بعد از ظهر' : 'قبل از ظهر' + hours = hours % 12 || 12 + return `${hours}:${min} ${time}` + } + return `${hours}:${min}` + } +}) + +Vue.filter('date', function (value, fullDate = false) { + value = String(value) + const date = value.slice(8, 10).trim() + const month = value.slice(4, 7).trim() + const year = value.slice(11, 15) + + if (!fullDate) return `${date} ${month}` + else return `${date} ${month} ${year}` +}) + +Vue.filter('month', function (val, showYear = true) { + val = String(val) + + const regx = /\w+\s(\w+)\s\d+\s(\d+)./ + if (!showYear) { + return regx.exec(val)[1] + } else { + return `${regx.exec(val)[1]} ${regx.exec(val)[2]}` + } + +}) + +Vue.filter('csv', function (value) { + return value.join(', ') +}) + +Vue.filter('filter_tags', function (value) { + return value.replace(/<\/?[^>]+(>|$)/g, '') +}) + +Vue.filter('k_formatter', function (num) { + return num > 999 ? `${(num / 1000).toFixed(1)}هزار` : num +}) + + + + +Vue.filter('price', (val) => { + if (val) { + return val.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); + } + return val; +}); + +Vue.filter('priceUnit', (val) => { + if (val) { + return val.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") + ' تومان '; + } + return val; +}); + + +Vue.filter('jdate', (val) => { + if (val) { + return moment(val).format('jYY/jMM/jDD-hh:mm:ss'); + } + return val; +}); diff --git a/src/firebase/firebaseConfig.js b/src/firebase/firebaseConfig.js new file mode 100644 index 0000000..4c4d473 --- /dev/null +++ b/src/firebase/firebaseConfig.js @@ -0,0 +1,17 @@ +// NOTE +// Please use your own firebase details below. For more details visit: https://pixinvent.com/demo/vuexy-vuejs-admin-dashboard-template/documentation/development/firebaseIntegration.html + + +import firebase from 'firebase/app' + +// Initialize Firebase +const config = { + apiKey: 'YOUR_API_KEY', + authDomain: 'AUTH_DOMAIN', + databaseURL: 'DB_URL', + projectId: 'PROJECT_ID', + storageBucket: 'BUCKET', + messagingSenderId: 'SENDER_ID' +} + +firebase.initializeApp(config) diff --git a/src/globalComponents.js b/src/globalComponents.js new file mode 100644 index 0000000..6fe3fa8 --- /dev/null +++ b/src/globalComponents.js @@ -0,0 +1,50 @@ +/*========================================================================================= + File Name: globalComponents.js + Description: Here you can register components globally + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + + +import Vue from 'vue' +import VxTooltip from './layouts/components/vx-tooltip/VxTooltip.vue' +import VxCard from './components/vx-card/VxCard.vue' +import VxList from './components/vx-list/VxList.vue' +import VxBreadcrumb from './layouts/components/VxBreadcrumb.vue' +import FeatherIcon from './components/FeatherIcon.vue' +import VxInputGroup from './components/vx-input-group/VxInputGroup.vue' + +Vue.component(VxTooltip.name, VxTooltip) +Vue.component(VxCard.name, VxCard) +Vue.component(VxList.name, VxList) +Vue.component(VxBreadcrumb.name, VxBreadcrumb) +Vue.component(FeatherIcon.name, FeatherIcon) +Vue.component(VxInputGroup.name, VxInputGroup) + + +// v-select component +import vSelect from 'vue-select' + +// Set the components prop default to return our fresh components +vSelect.props.components.default = () => ({ + Deselect: { + render: createElement => createElement('feather-icon', { + props: { + icon: 'XIcon', + svgClasses: 'w-4 h-4 mt-1' + } + }) + }, + OpenIndicator: { + render: createElement => createElement('feather-icon', { + props: { + icon: 'ChevronDownIcon', + svgClasses: 'w-5 h-5' + } + }) + } +}) + +Vue.component(vSelect) diff --git a/src/http/axios/index.js b/src/http/axios/index.js new file mode 100644 index 0000000..b99df4d --- /dev/null +++ b/src/http/axios/index.js @@ -0,0 +1,3 @@ +import axios from '../../axios.js' + +export default axios diff --git a/src/http/requests/auth/index.js b/src/http/requests/auth/index.js new file mode 100644 index 0000000..2b3fb31 --- /dev/null +++ b/src/http/requests/auth/index.js @@ -0,0 +1 @@ +import './jwt/index.js' diff --git a/src/http/requests/auth/jwt/index.js b/src/http/requests/auth/jwt/index.js new file mode 100644 index 0000000..b3cb1b9 --- /dev/null +++ b/src/http/requests/auth/jwt/index.js @@ -0,0 +1,63 @@ +import axios from '../../../axios/index.js' +import store from '../../../../store/store.js' + +// Token Refresh +let isAlreadyFetchingAccessToken = false +let subscribers = [] + +function onAccessTokenFetched (access_token) { + subscribers = subscribers.filter(callback => callback(access_token)) +} + +function addSubscriber (callback) { + subscribers.push(callback) +} + +export default { + init () { + axios.interceptors.response.use(function (response) { + return response + }, function (error) { + // const { config, response: { status } } = error + const { config, response } = error + const originalRequest = config + + // if (status === 401) { + if (response && response.status === 401) { + if (!isAlreadyFetchingAccessToken) { + isAlreadyFetchingAccessToken = true + store.dispatch('auth/fetchAccessToken') + .then((access_token) => { + isAlreadyFetchingAccessToken = false + onAccessTokenFetched(access_token) + }) + } + + const retryOriginalRequest = new Promise((resolve) => { + addSubscriber(access_token => { + originalRequest.headers.Authorization = `Bearer ${access_token}` + resolve(axios(originalRequest)) + }) + }) + return retryOriginalRequest + } + return Promise.reject(error) + }) + }, + login (email, pwd) { + return axios.post('/api/auth/login', { + email, + password: pwd + }) + }, + registerUser (name, email, pwd) { + return axios.post('/api/auth/register', { + displayName: name, + email, + password: pwd + }) + }, + refreshToken () { + return axios.post('/api/auth/refresh-token', {accessToken: localStorage.getItem('access_toKen')}) + } +} diff --git a/src/http/requests/index.js b/src/http/requests/index.js new file mode 100644 index 0000000..07a5df7 --- /dev/null +++ b/src/http/requests/index.js @@ -0,0 +1 @@ +import './auth' diff --git a/src/i18n/i18n.js b/src/i18n/i18n.js new file mode 100644 index 0000000..d90f109 --- /dev/null +++ b/src/i18n/i18n.js @@ -0,0 +1,20 @@ +/*========================================================================================= + File Name: i18n.js + Description: i18n configuration file. Imports i18n data. + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + + +import Vue from 'vue' +import VueI18n from 'vue-i18n' +import i18nData from './i18nData' + +Vue.use(VueI18n) + +export default new VueI18n({ + locale: 'en', // set default locale + messages: i18nData +}) diff --git a/src/i18n/i18nData.js b/src/i18n/i18nData.js new file mode 100644 index 0000000..fc3bd0c --- /dev/null +++ b/src/i18n/i18nData.js @@ -0,0 +1,519 @@ +// en, de, fr, pt +export default { + en: { + Dashboard: 'Dashboard', + eCommerce: 'eCommerce', + Apps: 'Apps', + Todo: 'Todo', + Chat: 'Chat', + Email: 'Email', + Calendar: 'Calendar', + FullCalendar: 'Full Calendar', + SimpleCalendar: 'Simple Calendar', + Shop: 'Shop', + ItemDetails: 'Item Details', + Cart: 'Cart', + WishList: 'Wish List', + Checkout: 'Checkout', + UI: 'UI', + DataList: 'Data List', + ListView: 'List View', + ThumbView: 'Thumb View', + Grid: 'Grid', + Vuexy: 'Vuexy', + Vuesax: 'Vuesax', + Tailwind: 'Tailwind', + Colors: 'Colors', + Card: 'Card', + Basic: 'Basic', + Statistics: 'Statistics', + Analytics: 'Analytics', + CardActions: 'Card Actions', + CardColors: 'Card Colors', + Table: 'Table', + agGridTable: 'agGrid Table', + Components: 'Components', + Alert: 'Alert', + Avatar: 'Avatar', + Badge: 'Badge', + Breadcrumb: 'Breadcrumb', + Button: 'Button', + ButtonGroup: 'Button Group', + Chip: 'Chip', + Collapse: 'Collapse', + Dialogs: 'Dialogs', + Divider: 'Divider', + DropDown: 'DropDown', + List: 'List', + Loading: 'Loading', + Navbar: 'Navbar', + Notifications: 'Notifications', + Pagination: 'Pagination', + Popup: 'Popup', + Progress: 'Progress', + Sidebar: 'Sidebar', + Slider: 'Slider', + Tabs: 'Tabs', + Tooltip: 'Tooltip', + Upload: 'Upload', + FormsAndTable: 'Forms & Table', + FormElements: 'Form Elements', + Select: 'Select', + Switch: 'Switch', + Checkbox: 'Checkbox', + Radio: 'Radio', + Input: 'Input', + NumberInput: 'Number Input', + Textarea: 'Textarea', + FormLayouts: 'Form Layouts', + FormWizard: 'Form Wizard', + FormValidation: 'Form Validation', + FormInputGroup: 'Form Input Group', + Pages: 'Pages', + Authentication: 'Authentication', + Login: 'Login', + Register: 'Register', + ForgotPassword: 'Forgot Password', + ResetPassword: 'Reset Password', + LockScreen: 'Lock Screen', + Miscellaneous: 'Miscellaneous', + ComingSoon: 'Coming Soon', + Error: 'Error', + 404: '404', + 500: '500', + NotAuthorized: 'Not Authorized', + Maintenance: 'Maintenance', + Profile: 'Profile', + User: 'User', + View: 'View', + Edit: 'Edit', + UserSettings: 'User Settings', + Invoice: 'Invoice', + FAQ: 'FAQ', + Search: 'Search', + KnowledgeBase: 'Knowledge Base', + ChartsAndMaps: 'Charts & Maps', + Charts: 'Charts', + ApexCharts: 'Apex Charts', + chartjs: 'chartjs', + echarts: 'echarts', + chartist: 'chartist', + GoogleMap: 'Google Map', + Extensions: 'Extensions', + QuillEditor: 'Quill Editor', + DragAndDrop: 'Drag & Drop', + Datepicker: 'Datepicker', + DatetimePicker: 'Datetime Picker', + AccessControl: 'Access Control', + I18n: 'I18n', + Carousel: 'Carousel', + Clipboard: 'Clipboard', + ContextMenu: 'Context Menu', + StarRatings: 'Star Ratings', + Autocomplete: 'Autocomplete', + Tree: 'Tree', + // "Import/Export": 'Import/Export', + Import: 'Import', + Export: 'Export', + ExportSelected: 'Export Selected', + Others: 'Others', + MenuLevels: 'Menu Levels', + MenuLevel2p1: 'Menu Level 2.1', + MenuLevel2p2: 'Menu Level 2.2', + MenuLevel3p1: 'Menu Level 3.1', + MenuLevel3p2: 'Menu Level 3.2', + DisabledMenu: 'Disabled Menu', + Support: 'Support', + Documentation: 'Documentation', + RaiseSupport: 'Raise Support', + demoTitle: 'Card Title', + demoText: '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.' + }, + de: { + Dashboard: 'Instrumententafel', + eCommerce: 'eCommerce', + Apps: 'Apps', + Todo: 'Machen', + Chat: 'Plaudern', + Email: 'Email', + Calendar: 'Kalender', + FullCalendar: 'Calendrier completVollständiger Kalender', + SimpleCalendar: 'Einfacher Kalender', + Shop: 'Geschäft', + ItemDetails: 'Artikeldetails', + Cart: 'Wagen', + WishList: 'Wunschzettel', + Checkout: 'Auschecken', + UI: 'UI', + DataList: 'Datenliste', + ListView: 'Listenansicht', + ThumbView: 'Daumenansicht', + Grid: 'Gitter', + Vuexy: 'Vuexy', + Vuesax: 'Vuesax', + Tailwind: 'Tailwind', + Colors: 'Farben', + Card: 'Karte', + Basic: 'Basic', + Statistics: 'Statistiken', + Analytics: 'Analytics', + CardActions: 'Kartenaktionen', + CardColors: 'Kartenfarben', + Table: 'Tabelle', + agGridTable: 'agGrid-Tabelle', + Components: 'Komponenten', + Alert: 'Warnen', + Avatar: 'Benutzerbild', + Badge: 'Abzeichen', + Breadcrumb: 'Breadcrumb', + Button: 'Taste', + ButtonGroup: 'Schaltflächengruppe', + Chip: 'Chip', + Collapse: 'Zusammenbruch', + Dialogs: 'Dialoge', + Divider: 'Teiler', + DropDown: 'Dropdown-Liste', + List: 'Liste', + Loading: 'Wird geladen', + Navbar: 'Navbar', + Notifications: 'Benachrichtigungen', + Pagination: 'Seitennummerierung', + Popup: 'Pop-up', + Progress: 'Fortschritt', + Sidebar: 'Seitenleiste', + Slider: 'Schieberegler', + Tabs: 'Tabs', + Tooltip: 'QuickInfo', + Upload: 'Hochladen', + FormsAndTable: 'Formulare und Tabelle', + FormElements: 'Formularelemente', + Select: 'Wählen', + Switch: 'Schalter', + Checkbox: 'Ankreuzfeld', + Radio: 'Radio', + Input: 'Eingang', + NumberInput: 'Nummer eingeben', + Textarea: 'Textbereich', + FormLayouts: 'Formularlayouts', + FormWizard: 'Formzauberer', + FormValidation: 'Formularvalidierung', + FormInputGroup: 'Formulareingabegruppe', + Pages: 'Seiten', + Authentication: 'Authentifizierung', + Login: 'Anmeldung', + Register: 'Registrieren', + ForgotPassword: 'Passwort vergessen', + ResetPassword: 'Passwort zurücksetzen', + LockScreen: 'Bildschirm sperren', + Miscellaneous: 'Verschiedenes', + ComingSoon: 'Demnächst', + Error: 'Error', + 404: '404', + 500: '500', + NotAuthorized: 'Nicht berechtigt', + Maintenance: 'Instandhaltung', + Profile: 'Profil', + User: 'Benutzer', + View: 'Aussicht', + Edit: 'Bearbeiten', + UserSettings: 'Benutzereinstellungen', + Invoice: 'Rechnung', + FAQ: 'FAQ', + Search: 'Suche', + KnowledgeBase: 'Wissensbasis', + ChartsAndMaps: 'Diagramme und Karten', + Charts: 'Diagramme', + ApexCharts: 'Apex Charts', + chartjs: 'chartjs', + echarts: 'echarts', + chartist: 'chartist', + GoogleMap: 'Google Karte', + Extensions: 'Erweiterungen', + QuillEditor: 'Quill-Editor', + DragAndDrop: 'Ziehen und loslassen', + Datepicker: 'Datumsauswahl', + DatetimePicker: 'Datum / Uhrzeit-Auswahl', + AccessControl: 'Zugangskontrolle', + I18n: 'I18n', + Carousel: 'Karussell', + Clipboard: 'Zwischenablage', + ContextMenu: 'Kontextmenü', + StarRatings: 'Sterne Bewertungen', + Autocomplete: 'Autovervollständigung', + Tree: 'Baum', + // "Import/Export": 'Einführen/Export', + Import: 'Einführen', + Export: 'Export', + ExportSelected: 'Auswahl exportieren', + Others: 'Andere', + MenuLevels: 'Menüebenen', + MenuLevel2p1: 'Menüebene 2.1', + MenuLevel2p2: 'Menüebene 2.2', + MenuLevel3p1: 'Menüebene 3.1', + MenuLevel3p2: 'Menüebene 3.2', + DisabledMenu: 'Deaktiviertes Menü', + Support: 'Unterstützung', + Documentation: 'Dokumentation', + RaiseSupport: 'Unterstützung erheben', + demoTitle: 'Kartentitel', + demoText: 'Kuchen Sesam Schnaps Cupcake Lebkuchen Dänisch Ich liebe Lebkuchen. Apfelkuchen-Torte-Jujuben chupa chups muffin halvah Lutscher. Schokoladenkuchenhaferkuchen Tiramisu-Marzipanzuckerpflaume. Donut süße Kuchen Hafer Kuchen Dragée Obstkuchen Zuckerwatte Zitrone Tropfen.' + }, + fr: { + Dashboard: 'Tableau de bord', + eCommerce: 'commerce électronique', + Apps: 'Applications', + Todo: 'Faire', + Chat: 'Bavarder', + Email: 'Email', + Calendar: 'Calendrier', + FullCalendar: 'Calendrier complet', + SimpleCalendar: 'Calendrier simple', + Shop: 'Boutique', + ItemDetails: 'Détails de l\'article', + Cart: 'Chariot', + WishList: 'Liste de souhaits', + Checkout: 'Check-out', + UI: 'UI', + DataList: 'Liste de données', + ListView: 'Voir la liste', + ThumbView: 'Thumb View', + Grid: 'la grille', + Vuexy: 'Vuexy', + Vuesax: 'Vuesax', + Tailwind: 'Tailwind', + Colors: 'Couleurs', + Card: 'Carte', + Basic: 'De base', + Statistics: 'Statistiques', + Analytics: 'Analytique', + CardActions: 'Actions de carte', + CardColors: 'Couleurs de la carte', + Table: 'Table', + agGridTable: 'tableau agGrid', + Components: 'Composants', + Alert: 'Alerte', + Avatar: 'Avatar', + Badge: 'Badge', + Breadcrumb: 'Breadcrumb', + Button: 'Bouton', + ButtonGroup: 'Groupe de boutons', + Chip: 'Puce', + Collapse: 'Effondrer', + Dialogs: 'Dialogues', + Divider: 'Diviseur', + DropDown: 'Menu déroulant', + List: 'liste', + Loading: 'Chargement', + Navbar: 'Barre de navigation', + Notifications: 'Les notifications', + Pagination: 'Pagination', + Popup: 'Apparaitre', + Progress: 'Le progrès', + Sidebar: 'Barre latérale', + Slider: 'Curseur', + Tabs: 'Onglets', + Tooltip: 'Info-bulle', + Upload: 'Télécharger', + FormsAndTable: 'Formulaires et tableau', + FormElements: 'Éléments de formulaire', + Select: 'Sélectionner', + Switch: 'Commutateur', + Checkbox: 'Case à cocher', + Radio: 'Radio', + Input: 'Contribution', + NumberInput: 'Nombre d\'entrée', + Textarea: 'Textarea', + FormLayouts: 'Dispositions de formulaire', + FormWizard: 'Assistant de formulaire', + FormValidation: 'Validation du formulaire', + FormInputGroup: 'Groupe de saisie de formulaire', + Pages: 'Pages', + Authentication: 'Authentification', + Login: 'S\'identifier', + Register: 'registre', + ForgotPassword: 'Mot de passe oublié', + ResetPassword: 'réinitialiser le mot de passe', + LockScreen: 'Écran verrouillé', + Miscellaneous: 'Divers', + ComingSoon: 'Arrive bientôt', + Error: 'Erreur', + 404: '404', + 500: '500', + NotAuthorized: 'Pas autorisé', + Maintenance: 'Entretien', + Profile: 'Profil', + User: 'Utilisateur', + View: 'Vue', + Edit: 'Modifier', + UserSettings: 'Paramètres utilisateur', + Invoice: 'Facture d\'achat', + FAQ: 'FAQ', + Search: 'Chercher', + KnowledgeBase: 'Base de connaissances', + ChartsAndMaps: 'Graphiques Et Cartes', + Charts: 'Graphiques', + ApexCharts: 'Apex Charts', + chartjs: 'chartjs', + echarts: 'echarts', + chartist: 'chartist', + GoogleMap: 'Google Carte', + Extensions: 'Extensions', + QuillEditor: 'Éditeur de piquants', + DragAndDrop: 'Drag & Drop', + Datepicker: 'Sélecteur de date', + DatetimePicker: 'Sélecteur de date / heure', + AccessControl: 'Contrôle d\'accès', + I18n: 'I18n', + Carousel: 'Carrousel', + Clipboard: 'Presse-papiers', + ContextMenu: 'Menu contextuel', + StarRatings: 'Classement par étoiles', + Autocomplete: 'Terminé automatiquement', + Tree: 'Arbre', + // "Import/Export": 'Importation/Exportation', + Import: 'Importation', + Export: 'Exportation', + ExportSelected: 'Exporter sélectionné', + Others: 'Autre', + MenuLevels: 'Niveaux de menu', + MenuLevel2p1: 'Niveau de menu 2.1', + MenuLevel2p2: 'Niveau de menu 2.2', + MenuLevel3p1: 'Niveau de menu 3.1', + MenuLevel3p2: 'Niveau de menu 3.2', + DisabledMenu: 'Menu désactivé', + Support: 'Soutien', + Documentation: 'Documentation', + RaiseSupport: 'Augmenter le soutien', + demoTitle: 'Titre de la carte', + demoText: 'Le gâteau au sésame s\'enclenche au petit pain au pain d\'épices danois J\'adore le pain d\'épices. Tarte aux pommes et jujubes chupa chups muffin halvah sucette. Tiramisu gâteau au chocolat gâteau d\'avoine tiramisu prune sucre. Donut tarte sucrée gâteau à l\'avoine dragée gouttes de fruits gâteau au citron en barbe à papa.' + }, + pt: { + Dashboard: 'painel de controle', + eCommerce: 'comércio eletrônico', + Apps: 'APPS', + Todo: 'Façam', + Chat: 'Bate-papo', + Email: 'O email', + Calendar: 'Calendário', + FullCalendar: 'Calendário Completo', + SimpleCalendar: 'Calendário Simples', + Shop: 'fazer compras', + ItemDetails: 'Detalhes do item', + Cart: 'Carrinho', + WishList: 'Lista de Desejos', + Checkout: 'Confira', + UI: 'UI', + DataList: 'Lista de dados', + ListView: 'Exibição de lista', + ThumbView: 'Thumb View', + Grid: 'Grade', + Vuexy: 'Vuexy', + Vuesax: 'Vuesax', + Tailwind: 'Tailwind', + Colors: 'Cores', + Card: 'Cartão', + Basic: 'Basic', + Statistics: 'Estatisticas', + Analytics: 'Analytics', + CardActions: 'Ações do Cartão', + CardColors: 'Cores do cartão', + Table: 'Mesa', + agGridTable: 'Tabela AgGrid', + Components: 'Componentes', + Alert: 'Alerta', + Avatar: 'Avatar', + Badge: 'Crachá', + Breadcrumb: 'Breadcrumb', + Button: 'Botão', + ButtonGroup: 'Grupo de botões', + Chip: 'Lasca', + Collapse: 'Colapso', + Dialogs: 'Diálogos', + Divider: 'Divisor', + DropDown: 'Suspenso', + List: 'Lista', + Loading: 'Carregando', + Navbar: 'Navbar', + Notifications: 'Notificações', + Pagination: 'Paginação', + Popup: 'Aparecer', + Progress: 'Progresso', + Sidebar: 'Barra Lateral', + Slider: 'Controle Deslizante', + Tabs: 'Guias', + Tooltip: 'dica de ferramenta', + Upload: 'Envio', + FormsAndTable: 'Formulários e tabela', + FormElements: 'Elementos do formulário', + Select: 'Selecione', + Switch: 'Interruptor', + Checkbox: 'Caixa de seleção', + Radio: 'Rádio', + Input: 'Entrada', + NumberInput: 'Entrada numérica', + Textarea: 'Textarea', + FormLayouts: 'Layouts de formulário', + FormWizard: 'Assistente de Formulário', + FormValidation: 'Validação de Formulário', + FormInputGroup: 'Grupo de entrada de formulário', + Pages: 'PÁGINAS', + Authentication: 'Autenticação', + Login: 'Entrar', + Register: 'Registo', + ForgotPassword: 'Esqueceu A Senha', + ResetPassword: 'Redefinir Senha', + LockScreen: 'Tela de bloqueio', + Miscellaneous: 'Diversos', + ComingSoon: 'Em breve', + Error: 'Erro', + 404: '404', + 500: '500', + NotAuthorized: 'Não autorizado', + Maintenance: 'Manutenção', + Profile: 'Perfil', + User: 'Do utilizador', + View: 'Visão', + Edit: 'Editar', + UserSettings: 'Configurações do Usuário', + Invoice: 'Fatura', + FAQ: 'Perguntas frequentes', + Search: 'Procurar', + KnowledgeBase: 'Base de Conhecimento', + ChartsAndMaps: 'Gráficos E Mapas', + Charts: 'Gráficos', + ApexCharts: 'Apex Charts', + chartjs: 'chartjs', + echarts: 'echarts', + chartist: 'chartist', + GoogleMap: 'Google Mapa', + Extensions: 'Extensão', + QuillEditor: 'Quill-Editor', + DragAndDrop: 'Arraste e solte', + Datepicker: 'Datepicker', + DatetimePicker: 'Seletor de data e hora', + AccessControl: 'Controle de acesso', + I18n: 'I18n', + Carousel: 'Carrossel', + Clipboard: 'Prancheta', + ContextMenu: 'Menu contextual', + StarRatings: 'Classificações por estrelas', + Autocomplete: 'autocompletar', + Tree: 'Árvore', + // "Import/Export": 'Importar/Exportar', + Import: 'Importar', + Export: 'Exportar', + ExportSelected: 'Exportar Selecionado', + Others: 'Outras', + MenuLevels: 'Níveis de Menu', + MenuLevel2p1: 'Nível de menu 2.1', + MenuLevel2p2: 'Nível de menu 2.2', + MenuLevel3p1: 'Nível de menu 3.1', + MenuLevel3p2: 'Nível de menu 3.2', + DisabledMenu: 'Menu desativado', + Support: 'Apoio, suporte', + Documentation: 'Documentação', + RaiseSupport: 'Levantar Suporte', + demoTitle: 'Título do cartão', + demoText: 'O sésamo do bolo agarra dinamarquês do pão-de-espécie do queque eu amo o pão-de-espécie. Torta de torta de maçã jujuba chupa chups muffin halvah pirulito. Ameixa do açúcar do maçapão do tiramisu do bolo da aveia do bolo de chocolate. Bolo de aveia de torta doce rosquinha dragée fruitcake algodão doce gotas de limão.' + } +} diff --git a/src/layouts/components/Logo.vue b/src/layouts/components/Logo.vue new file mode 100644 index 0000000..65a1c21 --- /dev/null +++ b/src/layouts/components/Logo.vue @@ -0,0 +1,25 @@ + + diff --git a/src/layouts/components/TheFooter.vue b/src/layouts/components/TheFooter.vue new file mode 100644 index 0000000..1972044 --- /dev/null +++ b/src/layouts/components/TheFooter.vue @@ -0,0 +1,36 @@ + + + + + + diff --git a/src/layouts/components/VxBreadcrumb.vue b/src/layouts/components/VxBreadcrumb.vue new file mode 100644 index 0000000..da436cd --- /dev/null +++ b/src/layouts/components/VxBreadcrumb.vue @@ -0,0 +1,37 @@ + + + + + + diff --git a/src/layouts/components/customizer/TheCustomizer.vue b/src/layouts/components/customizer/TheCustomizer.vue new file mode 100644 index 0000000..f477d9c --- /dev/null +++ b/src/layouts/components/customizer/TheCustomizer.vue @@ -0,0 +1,371 @@ + + + + + + + + + + diff --git a/src/layouts/components/horizontal-nav-menu/HorizontalNavMenu.vue b/src/layouts/components/horizontal-nav-menu/HorizontalNavMenu.vue new file mode 100644 index 0000000..c78ea2d --- /dev/null +++ b/src/layouts/components/horizontal-nav-menu/HorizontalNavMenu.vue @@ -0,0 +1,96 @@ + + + + + diff --git a/src/layouts/components/horizontal-nav-menu/HorizontalNavMenuGroup.vue b/src/layouts/components/horizontal-nav-menu/HorizontalNavMenuGroup.vue new file mode 100644 index 0000000..c5d5ee5 --- /dev/null +++ b/src/layouts/components/horizontal-nav-menu/HorizontalNavMenuGroup.vue @@ -0,0 +1,194 @@ + + + + + + diff --git a/src/layouts/components/horizontal-nav-menu/HorizontalNavMenuHeader.vue b/src/layouts/components/horizontal-nav-menu/HorizontalNavMenuHeader.vue new file mode 100644 index 0000000..51a3d62 --- /dev/null +++ b/src/layouts/components/horizontal-nav-menu/HorizontalNavMenuHeader.vue @@ -0,0 +1,134 @@ + + + + + diff --git a/src/layouts/components/horizontal-nav-menu/HorizontalNavMenuItem.vue b/src/layouts/components/horizontal-nav-menu/HorizontalNavMenuItem.vue new file mode 100644 index 0000000..f46d745 --- /dev/null +++ b/src/layouts/components/horizontal-nav-menu/HorizontalNavMenuItem.vue @@ -0,0 +1,72 @@ + + + + + + + diff --git a/src/layouts/components/navbar/TheNavbarHorizontal.vue b/src/layouts/components/navbar/TheNavbarHorizontal.vue new file mode 100644 index 0000000..de8dc9c --- /dev/null +++ b/src/layouts/components/navbar/TheNavbarHorizontal.vue @@ -0,0 +1,90 @@ + + + + + + + diff --git a/src/layouts/components/navbar/TheNavbarVertical.vue b/src/layouts/components/navbar/TheNavbarVertical.vue new file mode 100644 index 0000000..83ce3aa --- /dev/null +++ b/src/layouts/components/navbar/TheNavbarVertical.vue @@ -0,0 +1,87 @@ + + + + + + + + diff --git a/src/layouts/components/navbar/components/Bookmarks.vue b/src/layouts/components/navbar/components/Bookmarks.vue new file mode 100644 index 0000000..a784f34 --- /dev/null +++ b/src/layouts/components/navbar/components/Bookmarks.vue @@ -0,0 +1,163 @@ + + + diff --git a/src/layouts/components/navbar/components/CartDropDown.vue b/src/layouts/components/navbar/components/CartDropDown.vue new file mode 100644 index 0000000..d9ead2f --- /dev/null +++ b/src/layouts/components/navbar/components/CartDropDown.vue @@ -0,0 +1,91 @@ + + + diff --git a/src/layouts/components/navbar/components/I18n.vue b/src/layouts/components/navbar/components/I18n.vue new file mode 100644 index 0000000..0c97856 --- /dev/null +++ b/src/layouts/components/navbar/components/I18n.vue @@ -0,0 +1,36 @@ + + + diff --git a/src/layouts/components/navbar/components/NotificationDropDown.vue b/src/layouts/components/navbar/components/NotificationDropDown.vue new file mode 100644 index 0000000..43bf538 --- /dev/null +++ b/src/layouts/components/navbar/components/NotificationDropDown.vue @@ -0,0 +1,146 @@ + + + + + + + + diff --git a/src/layouts/components/navbar/components/ProfileDropDown.vue b/src/layouts/components/navbar/components/ProfileDropDown.vue new file mode 100644 index 0000000..bb82ec5 --- /dev/null +++ b/src/layouts/components/navbar/components/ProfileDropDown.vue @@ -0,0 +1,64 @@ + + + diff --git a/src/layouts/components/navbar/components/SearchBar.vue b/src/layouts/components/navbar/components/SearchBar.vue new file mode 100644 index 0000000..7b6838d --- /dev/null +++ b/src/layouts/components/navbar/components/SearchBar.vue @@ -0,0 +1,106 @@ + + + diff --git a/src/layouts/components/navbar/navbarSearchAndPinList.js b/src/layouts/components/navbar/navbarSearchAndPinList.js new file mode 100644 index 0000000..221b0b2 --- /dev/null +++ b/src/layouts/components/navbar/navbarSearchAndPinList.js @@ -0,0 +1,152 @@ +/* eslint-disable */ +export default { + pages: { + key: "title", + data: [ + // DASHBOARDS + {title: "Analytics Dashboard", url: "/dashboard/analytics", icon: "HomeIcon", is_bookmarked: false}, + {title: "eCommerce Dashboard", url: "/dashboard/ecommerce", icon: "HomeIcon", is_bookmarked: false}, + + // APPS + {title: "Todo", url: "/apps/todo", icon: "CheckSquareIcon", is_bookmarked: true}, + {title: "Chat", url: "/apps/chat", icon: "MessageSquareIcon", is_bookmarked: true}, + {title: "Email", url: "/apps/email", icon: "MailIcon", is_bookmarked: true}, + {title: "Calendar", url: "/apps/calendar/vue-simple-calendar", icon: "CalendarIcon", is_bookmarked: true}, + {title: "E-Commerce Shop", url: "/apps/eCommerce/shop", icon: "ShoppingCartIcon", is_bookmarked: true}, + {title: "E-Commerce Item Detail", url: "/apps/eCommerce/item", icon: "SmartphoneIcon", is_bookmarked: false}, + {title: "E-Commerce Wish List", url: "/apps/eCommerce/wish-list", icon: "HeartIcon", is_bookmarked: false}, + {title: "E-Commerce Checkout", url: "/apps/eCommerce/checkout", icon: "CreditCardIcon", is_bookmarked: false}, + {title: "User List", url: "/apps/user/user-list", icon: "ListIcon", is_bookmarked: false}, + {title: "User View", url: "/apps/user/user-view/268", icon: "UserIcon", is_bookmarked: false}, + {title: "User Edit", url: "/apps/user/user-edit/268", icon: "EditIcon", is_bookmarked: false}, + + // UI ELEMENTS + {title: "Data List - List View", url: "/ui-elements/data-list/list-view", icon: "ListIcon", is_bookmarked: false}, + {title: "Data List - Thumb View", url: "/ui-elements/data-list/thumb-view", icon: "ImageIcon", is_bookmarked: false}, + {title: "Vuesax Grid", url: "/ui-elements/grid/vuesax", icon: "LayoutIcon", is_bookmarked: false}, + {title: "Tailwind Grid", url: "/ui-elements/grid/tailwind", icon: "LayoutIcon", is_bookmarked: false}, + {title: "Colors", url: "/ui-elements/colors", icon: "DropletIcon", is_bookmarked: false}, + {title: "Basic Cards", url: "/ui-elements/card/basic", icon: "CreditCardIcon", is_bookmarked: false}, + {title: "Statistics Card", url: "/ui-elements/card/statistics", icon: "CreditCardIcon", is_bookmarked: false}, + {title: "Analytics Cards", url: "/ui-elements/card/analytics", icon: "CreditCardIcon", is_bookmarked: false}, + {title: "Card Actions", url: "/ui-elements/card/card-actions", icon: "CreditCardIcon", is_bookmarked: false}, + {title: "Card Colors", url: "/ui-elements/card/card-colors", icon: "FeatherIcon", is_bookmarked: false}, + {title: "Table", url: "/ui-elements/table", icon: "GridIcon", is_bookmarked: false}, + {title: "agGrid Table", url: "/ui-elements/ag-grid-table", icon: "GridIcon", is_bookmarked: false}, + {title: "Alert Component", url: "/components/alert", icon: "AlertTriangleIcon", is_bookmarked: false}, + {title: "Avatar Component", url: "/components/avatar", icon: "UserIcon", is_bookmarked: false}, + {title: "Breadcrumb Component", url: "/components/breadcrumb", icon: "NavigationIcon", is_bookmarked: false}, + {title: "Button Component", url: "/components/button", icon: "BoldIcon", is_bookmarked: false}, + {title: "Button Group Component", url: "/components/button-group", icon: "BoldIcon", is_bookmarked: false}, + {title: "Chip Component", url: "/components/chip", icon: "TagIcon", is_bookmarked: false}, + {title: "Collapse Component", url: "/components/collapse", icon: "PlusIcon", is_bookmarked: false}, + {title: "Dialogs Component", url: "/components/dialogs", icon: "CopyIcon", is_bookmarked: false}, + {title: "Divider Component", url: "/components/divider", icon: "MinusIcon", is_bookmarked: false}, + {title: "DropDown Component", url: "/components/dropdown", icon: "MoreHorizontalIcon", is_bookmarked: false}, + {title: "List Component", url: "/components/list", icon: "ListIcon", is_bookmarked: false}, + {title: "Loading Component", url: "/components/loading", icon: "LoaderIcon", is_bookmarked: false}, + {title: "Navbar Component", url: "/components/navbar", icon: "CreditCardIcon", is_bookmarked: false}, + {title: "Notifications Component", url: "/components/notifications", icon: "BellIcon", is_bookmarked: false}, + {title: "Pagination Component", url: "/components/pagination", icon: "ChevronsRightIcon", is_bookmarked: false}, + {title: "Popup Component", url: "/components/popup", icon: "CopyIcon", is_bookmarked: false}, + {title: "Progress Component", url: "/components/progress", icon: "SlidersIcon", is_bookmarked: false}, + {title: "Sidebar Component", url: "/components/sidebar", icon: "SidebarIcon", is_bookmarked: false}, + {title: "Slider Component", url: "/components/slider", icon: "SlidersIcon", is_bookmarked: false}, + {title: "Tabs Component", url: "/components/tabs", icon: "CreditCardIcon", is_bookmarked: false}, + {title: "Tooltip Component", url: "/components/tooltip", icon: "AlertCircleIcon", is_bookmarked: false}, + {title: "Upload Component", url: "/components/upload", icon: "UploadIcon", is_bookmarked: false}, + + // FORMS + // {title: "Select Form Element", url: "/forms/form-elements/select", icon: "CheckIcon", is_bookmarked: false}, + {title: "Switch Form Element", url: "/forms/form-elements/switch", icon: "ToggleLeftIcon", is_bookmarked: false}, + {title: "Checkbox Form Element", url: "/forms/form-elements/checkbox", icon: "CheckSquareIcon", is_bookmarked: false}, + {title: "Radio Form Element", url: "/forms/form-elements/radio", icon: "DiscIcon", is_bookmarked: false}, + {title: "Input Form Element", url: "/forms/form-elements/input", icon: "TypeIcon", is_bookmarked: false}, + {title: "Number Input Form Element", url: "/forms/form-elements/number-input", icon: "TypeIcon", is_bookmarked: false}, + {title: "Textarea Form Element", url: "/forms/form-elements/textarea", icon: "TypeIcon", is_bookmarked: false}, + {title: "Form Layouts", url: "/forms/form-layouts", icon: "LayoutIcon", is_bookmarked: false}, + {title: "Form Wizard", url: "/forms/form-wizard", icon: "GitCommitIcon", is_bookmarked: false}, + {title: "Form Validation", url: "/forms/form-validation", icon: "CheckSquareIcon", is_bookmarked: false}, + {title: "Form Input Group", url: "/forms/form-input-group", icon: "MenuIcon", is_bookmarked: false}, + + // PAGES + {title: "Login Page", url: "/pages/login", icon: "LockIcon", is_bookmarked: false}, + {title: "Register Page", url: "/pages/register", icon: "UserPlusIcon", is_bookmarked: false}, + {title: "Forgot Password Page", url: "/pages/forgot-password", icon: "HelpCircleIcon", is_bookmarked: false}, + {title: "Reset Password Page", url: "/pages/reset-password", icon: "UnlockIcon", is_bookmarked: false}, + {title: "Lock Screen Page", url: "/pages/lock-screen", icon: "LockIcon", is_bookmarked: false}, + {title: "Coming Soon Page", url: "/pages/comingsoon", icon: "ClockIcon", is_bookmarked: false}, + {title: "404 Page", url: "/pages/error-404", icon: "MonitorIcon", is_bookmarked: false}, + {title: "500 Page", url: "/pages/error-500", icon: "MonitorIcon", is_bookmarked: false}, + {title: "Not Authorized Page", url: "/pages/not-authorized", icon: "XCircleIcon", is_bookmarked: false}, + {title: "Maintenance Page", url: "/pages/maintenance", icon: "MonitorIcon", is_bookmarked: false}, + {title: "Profile Page", url: "/pages/profile", icon: "UserIcon", is_bookmarked: false}, + {title: "User Settings", url: "/pages/user-settings", icon: "SettingsIcon", is_bookmarked: false}, + {title: "FAQ Page", url: "/pages/faq", icon: "HelpCircleIcon", is_bookmarked: false}, + {title: "KnowledgeBase Page", url: "/pages/knowledge-base", icon: "BookIcon", is_bookmarked: false}, + {title: "Search Page", url: "/pages/search", icon: "SearchIcon", is_bookmarked: false}, + {title: "Invoice Page", url: "/pages/invoice", icon: "FileIcon", is_bookmarked: false}, + + // CHARTS & MAPS + {title: "Apex Charts", url: "/charts-and-maps/charts/apex-charts", icon: "PieChartIcon", is_bookmarked: false}, + {title: "chartjs", url: "/charts-and-maps/charts/chartjs", icon: "PieChartIcon", is_bookmarked: false}, + {title: "echarts", url: "/charts-and-maps/charts/echarts", icon: "PieChartIcon", is_bookmarked: false}, + {title: "Google Map", url: "/charts-and-maps/maps/google-map", icon: "MapIcon", is_bookmarked: false}, + + // EXTENSIONS + {title: "Select Extension", url: "/extensions/select", icon: "CheckIcon", is_bookmarked: false}, + {title: "Quill Editor", url: "/extensions/quill-editor", icon: "EditIcon", is_bookmarked: false}, + {title: "Drag & Drop", url: "/extensions/drag-and-drop", icon: "CopyIcon", is_bookmarked: false}, + {title: "Datepicker", url: "/extensions/datepicker", icon: "CalendarIcon", is_bookmarked: false}, + {title: "Datetime Picker", url: "/extensions/datetime-picker", icon: "ClockIcon", is_bookmarked: false}, + {title: "Access Control", url: "/extensions/access-control", icon: "LockIcon", is_bookmarked: false}, + {title: "I18n", url: "/extensions/i18n", icon: "GlobeIcon", is_bookmarked: false}, + {title: "Carousel", url: "/extensions/carousel", icon: "LayersIcon", is_bookmarked: false}, + {title: "Clipboard", url: "/extensions/clipboard", icon: "CopyIcon", is_bookmarked: false}, + {title: "Context Menu", url: "/extensions/context-menu", icon: "MoreHorizontalIcon", is_bookmarked: false}, + {title: "Star Rating", url: "/extensions/star-ratings", icon: "StarIcon", is_bookmarked: false}, + {title: "Autocomplete", url: "/extensions/autocomplete", icon: "Edit3Icon", is_bookmarked: false}, + {title: "Tree", url: "/extensions/tree", icon: "GitPullRequestIcon", is_bookmarked: false}, + {title: "Import", url: "/import-export/import", icon: "FileTextIcon", is_bookmarked: false}, + {title: "Export", url: "/import-export/export", icon: "ExternalLinkIcon", is_bookmarked: false}, + {title: "Export Selected", url: "/import-export/export-selected", icon: "ExternalLinkIcon", is_bookmarked: false}, + ] + }, + files: { + key:"file_name", + data: [ + { file_name: "Joe's CV", from:"Stacy Watson", file_ext:"doc", size:"1.7 mb" }, + { file_name: "Passport Image", from:"Ben Sinitiere", file_ext:"jpg", size:" 52 kb" }, + { file_name: "Questions", from:"Charleen Patti", file_ext:"doc", size:"1.5 gb" }, + { file_name: "Parenting Guide", from:"Doyle Blatteau", file_ext:"doc", size:"2.3 mb" }, + { file_name: "Class Notes", from:"Gwen Greenlow", file_ext:"doc", size:" 30 kb" }, + { file_name: "Class Attendance", from:"Tom Alred", file_ext:"xls", size:"52 mb" }, + { file_name: "Company Salary", from:"Nellie Dezan", file_ext:"xls", size:"29 mb" }, + { file_name: "Company Logo", from:"Steve Sheldon", file_ext:"jpg", size:"1.3 mb" }, + { file_name: "Crime Rates", from:"Sherlock Holmes", file_ext:"xls", size:"37 kb" }, + { file_name: "Ulysses", from:"Theresia Wrenne", file_ext:"pdf", size:"7.2 mb" }, + { file_name: "War and Peace", from:"Goldie Highnote", file_ext:"pdf", size:"10.5 mb" }, + { file_name: "Vedas", from:"Ajay Patel", file_ext:"pdf", size:"8.3 mb" }, + { file_name: "The Trial", from:"Sirena Linkert", file_ext:"pdf", size:"1.5 mb" }, + ] + }, + contacts: { + key:"name", + data: [ + { img: require("@/assets/images/portrait/small/avatar-s-4.jpg"), name: "Rena Brant", email: "nephrod@preany.co.uk", time: "21/05/2019" }, + { img: require("@/assets/images/portrait/small/avatar-s-2.jpg"), name: "Mariano Packard", email: "seek@sparaxis.org", time: "14/01/2018" }, + { img: require("@/assets/images/portrait/small/avatar-s-24.jpg"), name: "Risa Montufar", email: "vagary@unblist.org", time: "10/08/2019" }, + { img: require("@/assets/images/portrait/small/avatar-s-15.jpg"), name: "Maragaret Cimo", email: "designed@insanely.net", time: "01/12/2019" }, + { img: require("@/assets/images/portrait/small/avatar-s-7.jpg"), name: "Jona Prattis", email: "unwieldable@unblist.org", time: "21/05/2019" }, + { img: require("@/assets/images/portrait/small/avatar-s-5.jpg"), name: "Edmond Chicon", email: "museist@anaphyte.co.uk", time: "15/11/2019" }, + { img: require("@/assets/images/portrait/small/avatar-s-25.jpg"), name: "Abbey Darden", email: "astema@defectively.co.uk", time: "07/05/2019" }, + { img: require("@/assets/images/portrait/small/avatar-s-10.jpg"), name: "Seema Moallankamp", email: "fernando@storkish.co.uk", time: "13/08/2017" }, + { img: require("@/assets/images/portrait/small/avatar-s-2.jpg"), name: "Charleen Warmington", email: "furphy@cannibal.net", time: "11/08/1891" }, + { img: require("@/assets/images/portrait/small/avatar-s-25.jpg"), name: "Geri Linch", email: "insignia@markab.org", time: "18/01/2015" }, + { img: require("@/assets/images/portrait/small/avatar-s-23.jpg"), name: "Shellie Muster", email: "maxillary@equalize.co.uk", time: "26/07/2019" }, + { img: require("@/assets/images/portrait/small/avatar-s-20.jpg"), name: "Jesenia Vanbramer", email: "hypotony@phonetist.net", time: "12/09/2017" }, + { img: require("@/assets/images/portrait/small/avatar-s-23.jpg"), name: "Mardell Channey", email: "peseta@myrica.com", time: "11/11/2019" }, + ] + }, +} +/* eslint-enable */ diff --git a/src/layouts/components/vertical-nav-menu/VerticalNavMenu.vue b/src/layouts/components/vertical-nav-menu/VerticalNavMenu.vue new file mode 100644 index 0000000..3ee7762 --- /dev/null +++ b/src/layouts/components/vertical-nav-menu/VerticalNavMenu.vue @@ -0,0 +1,355 @@ + + + + + + + + + + diff --git a/src/layouts/components/vertical-nav-menu/VerticalNavMenuGroup.vue b/src/layouts/components/vertical-nav-menu/VerticalNavMenuGroup.vue new file mode 100644 index 0000000..ad66ba6 --- /dev/null +++ b/src/layouts/components/vertical-nav-menu/VerticalNavMenuGroup.vue @@ -0,0 +1,239 @@ + + + + + + + + + + diff --git a/src/layouts/components/vertical-nav-menu/VerticalNavMenuItem.vue b/src/layouts/components/vertical-nav-menu/VerticalNavMenuItem.vue new file mode 100644 index 0000000..19e99b1 --- /dev/null +++ b/src/layouts/components/vertical-nav-menu/VerticalNavMenuItem.vue @@ -0,0 +1,67 @@ + + + + + + diff --git a/src/layouts/components/vertical-nav-menu/navMenuItems.js b/src/layouts/components/vertical-nav-menu/navMenuItems.js new file mode 100644 index 0000000..cc1411f --- /dev/null +++ b/src/layouts/components/vertical-nav-menu/navMenuItems.js @@ -0,0 +1,33 @@ + +export default [ + { + url: '/dashboard', + name: 'داشبرد', + icon: 'HomeIcon', + i18n: 'داشبرد', + slug: "config", + }, + { + url: '/config', + icon: 'LayersIcon', + i18n: 'پیکر بندی', + slug: 'config', + }, + { + url: "/proposal", + name: "proposal", + slug: "proposal", + icon: "AlignJustifyIcon", + i18n: "درخواست ها", + }, + { + url: "/personel", + name: "personel", + slug: "personel", + icon: "AlignJustifyIcon", + i18n: "اطلاعات پرسنلی", + }, + +] + + diff --git a/src/layouts/components/vx-tooltip/VxTooltip.vue b/src/layouts/components/vx-tooltip/VxTooltip.vue new file mode 100644 index 0000000..c6025f4 --- /dev/null +++ b/src/layouts/components/vx-tooltip/VxTooltip.vue @@ -0,0 +1,124 @@ + + diff --git a/src/layouts/full-page/FullPage.vue b/src/layouts/full-page/FullPage.vue new file mode 100644 index 0000000..13ba07b --- /dev/null +++ b/src/layouts/full-page/FullPage.vue @@ -0,0 +1,15 @@ + + + + diff --git a/src/layouts/main/Main.vue b/src/layouts/main/Main.vue new file mode 100644 index 0000000..237f25a --- /dev/null +++ b/src/layouts/main/Main.vue @@ -0,0 +1,265 @@ + + + + + + diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..ac0206f --- /dev/null +++ b/src/main.js @@ -0,0 +1,143 @@ +/*========================================================================================= + File Name: main.jsقخ + Description: main vue(js) file + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + + +import Vue from 'vue' +import App from './App.vue' +import Antd from 'ant-design-vue'; +import 'ant-design-vue/dist/antd.less'; + +// Vuesax Component Framework +import Vuesax from 'vuesax' +import 'material-icons/iconfont/material-icons.css' //Material Icons +import 'vuesax/dist/vuesax.css' // Vuesax +Vue.use(Vuesax) +Vue.use(Antd) + +// axios +import axios from './axios.js' + +Vue.prototype.$http = axios + +// API Calls +import './http/requests' + +// mock +import './fake-db/index.js' + +// Theme Configurations +import '../themeConfig.js' + + +// Firebase +import '@/firebase/firebaseConfig' + + +// Auth0 Plugin +import AuthPlugin from './plugins/auth' + +Vue.use(AuthPlugin) + + +// ACL +import acl from './acl/acl' + + +// Globally Registered Components +import './globalComponents.js' + + +// Styles: SCSS +import './assets/scss/main.scss' + + +// Tailwind +import '@/assets/css/main.css' + +// Vue Router +import router from './router' + + +// Vuex Store +import store from './store/store' + + +// i18n +import i18n from './i18n/i18n' + + +// Vuexy Admin Filters +import './filters/filters' + + +// Clipboard +import VueClipboard from 'vue-clipboard2' + +Vue.use(VueClipboard) + + +// Tour +import VueTour from 'vue-tour' + +Vue.use(VueTour) +require('vue-tour/dist/vue-tour.css') + + +// VeeValidate +import VeeValidate from 'vee-validate' + +Vue.use(VeeValidate) + + +// Google Maps +import * as VueGoogleMaps from 'vue2-google-maps' + +Vue.use(VueGoogleMaps, { + load: { + // Add your API key here + key: 'AIzaSyB4DDathvvwuwlwnUu7F4Sow3oU22y5T1Y', + libraries: 'places' // This is required if you use the Auto complete plug-in + } +}) + +// Vuejs - Vue wrapper for hammerjs +import {VueHammer} from 'vue2-hammer' + +Vue.use(VueHammer) + + +// Vuejs - Vue wrapper for hammerjs +import notify from './notify' + +Vue.use(notify) + + +// PrismJS +import 'prismjs' +import 'prismjs/themes/prism-tomorrow.css' + + +// Feather font icon +require('./assets/css/iconfont.css') + + +// Vue select css +// Note: In latest version you have to add it separately +// import 'vue-select/dist/vue-select.css'; + + +Vue.config.productionTip = false + +new Vue({ + router, + store, + i18n, + acl, + render: h => h(App) +}).$mount('#app') diff --git a/src/notify.js b/src/notify.js new file mode 100644 index 0000000..9f4db5e --- /dev/null +++ b/src/notify.js @@ -0,0 +1,37 @@ +export default { + install(Vue, options) { + // 4. add an instance method + Vue.prototype.$ntSetError = function (msg) { + this.$vs.notify({ + title: 'خطا در ثبت اطلاعات', + text: msg || 'اطلاعات ثبت نگردید.', + color: 'danger', + }) + } + + Vue.prototype.$ntSet = function (msg) { + this.$vs.notify({ + title: 'اطلاعات ثبت شد.', + text: msg || 'اطلاعات با موفقیت به ثبت رسید', + color: 'primary', + }) + } + + + Vue.prototype.$ntRemove = function (msg) { + this.$vs.notify({ + title: 'اطلاعات با موفقیت حذف شد', + text: msg || '', + color: 'warning', + }) + } + + Vue.prototype.$ntGetError = function (msg) { + this.$vs.notify({ + title: 'خطا در ثبت اطلاعات', + text: msg || 'در اطلاعات دریافت شده خطایی رخ داده ', + color: 'danger', + }) + } + } +}; diff --git a/src/plugins/auth.js b/src/plugins/auth.js new file mode 100644 index 0000000..7b14add --- /dev/null +++ b/src/plugins/auth.js @@ -0,0 +1,21 @@ +import authService from '../auth/authService' + +export default { + install (Vue) { + Vue.prototype.$auth = authService + + Vue.mixin({ + created () { + if (this.handleLoginEvent) { + authService.addListener('loginEvent', this.handleLoginEvent) + } + }, + + destroyed () { + if (this.handleLoginEvent) { + authService.removeListener('loginEvent', this.handleLoginEvent) + } + } + }) + } +} \ No newline at end of file diff --git a/src/plugins/fullscreen.js b/src/plugins/fullscreen.js new file mode 100644 index 0000000..013c963 --- /dev/null +++ b/src/plugins/fullscreen.js @@ -0,0 +1,27 @@ +/* View in fullscreen */ +export function openFullscreen(elem) { + if (elem.requestFullscreen) { + elem.requestFullscreen(); + } else if (elem.mozRequestFullScreen) { /* Firefox */ + elem.mozRequestFullScreen(); + } else if (elem.webkitRequestFullscreen) { /* Chrome, Safari and Opera */ + elem.webkitRequestFullscreen(); + } else if (elem.msRequestFullscreen) { /* IE/Edge */ + elem.msRequestFullscreen(); + } +} + +/* Close fullscreen */ +export function closeFullscreen() { + if (document.exitFullscreen) { + document.exitFullscreen(); + } else if (document.mozCancelFullScreen) { /* Firefox */ + document.mozCancelFullScreen(); + } else if (document.webkitExitFullscreen) { /* Chrome, Safari and Opera */ + document.webkitExitFullscreen(); + } else if (document.msExitFullscreen) { /* IE/Edge */ + document.msExitFullscreen(); + } +} + + diff --git a/src/router.js b/src/router.js new file mode 100644 index 0000000..b230b03 --- /dev/null +++ b/src/router.js @@ -0,0 +1,136 @@ +import Vue from 'vue' +import Router from 'vue-router' +import 'firebase/auth' + +Vue.use(Router) + +const router = new Router({ + mode: 'history', + base: process.env.BASE_URL, + scrollBehavior() { + return {x: 0, y: 0} + }, + routes: [ + { + path: '/auth', + component: () => import('@/layouts/full-page/FullPage.vue'), + + children: [ + { + path: '/auth/login', + name: 'auth-login', + component: () => import('./views/auth/Login.vue'), + meta: { + rule: 'editor' + } + }, + // { + // path: '/auth/register', + // name: 'auth-register', + // component: () => import('@/views/auth/Register.vue'), + // meta: { + // rule: 'editor' + // } + // }, + // { + // path: '/auth/forgot-password', + // name: 'auth-forget', + // component: () => import('@/views/auth/ForgotPassword.vue'), + // meta: { + // rule: 'editor' + // } + // }, + ] + }, + { + path: '', + component: () => import('./layouts/main/Main.vue'), + children: [ + { + path: '/', + name: 'dashboard', + redirect: '/dashboard' + }, + { + path: '/dashboard', + name: 'dashborrdPage', + component: () => import('./views/DashboardAnalytics.vue'), + meta: { + rule: 'editor' + } + }, + { + path: '/config', + name: 'config', + component: () => import('./views/config/Config.vue'), + meta: { + rule: 'editor', + parent: 'main' + } + }, + { + path: '/proposal', + name: 'proposal', + component: () => import('./views/proposal/Proposal.vue'), + meta: { + rule: 'editor', + parent: 'main' + } + }, + { + path: '/personel', + name: 'personel', + component: () => import('./views/personel/Personel.vue'), + meta: { + rule: 'editor', + parent: 'main' + } + }, + ] + }, + { + path: '*', + redirect: '/pages/error-404' + } + ], +}) + +router.afterEach(() => { + const appLoading = document.getElementById('loading-bg') + if (appLoading) { + appLoading.style.display = "none"; + } +}) + +router.beforeEach((to, from, next) => { + let isLogin = localStorage.getItem('accessToken'); + console.log("to.path ==> ", to.path); + if ( + ( + to.path === "/auth/login" || + to.path === "/auth/register" || + to.path === "/pages/error-404" || + to.path === "/auth/forgot-password" + ) + ) { + if (isLogin) { + router.push({path: '/'}); + } + return next(); + } + + if (!isLogin) { + router.push({path: '/auth/login'}); + return; + } else { + return next(); + } + +}); + +export default router + + + + + diff --git a/src/router/apps.js b/src/router/apps.js new file mode 100644 index 0000000..c565059 --- /dev/null +++ b/src/router/apps.js @@ -0,0 +1,44 @@ +export default [ + // { + // path: '/apps/todo', + // redirect: '/apps/todo/all', + // name: 'todo' + // }, + // { + // path: '/apps/todo/:filter', + // component: () => import('@/views/apps/todo/Todo.vue'), + // meta: { + // rule: 'editor', + // parent: 'todo', + // no_scroll: true + // } + // }, + { + path: '/apps/ticket', + redirect: '/apps/ticket/inbox', + name: 'ticket' + }, + { + path: '/apps/ticket/:filter', + component: () => import('@/views/apps/ticket/Ticket.vue'), + meta: { + rule: 'editor', + parent: 'ticket', + no_scroll: true + } + }, + { + path: '/apps/finance', + redirect: '/apps/finance/order', + name: 'finance' + }, + { + path: '/apps/finance/fee-list', + component: () => import('@/views/apps/finance/FeeList.vue'), + meta: { + rule: 'editor', + parent: 'finance', + no_scroll: true + } + }, +] diff --git a/src/router/category.js b/src/router/category.js new file mode 100644 index 0000000..8553fec --- /dev/null +++ b/src/router/category.js @@ -0,0 +1,38 @@ +export default [ + // Category + { + path: '/category', + redirect: '/category/list', + name: 'category' + }, + { + path: '/category/add', + name:'category-add', + component: () => import('@/views/apps/category/Add.vue'), + meta: { + rule: 'editor', + parent: 'category', + no_scroll: true + } + }, + { + path: '/category/edit/:id', + component: () => import('@/views/apps/category/Edit.vue'), + name:'category-edit', + meta: { + rule: 'editor', + parent: 'category', + no_scroll: true + } + }, + { + path: '/category/list', + name:'category-list', + component: () => import('@/views/apps/category/List.vue'), + meta: { + rule: 'editor', + parent: 'category', + no_scroll: true + } + }, +] diff --git a/src/router/customer.js b/src/router/customer.js new file mode 100644 index 0000000..9cba4e2 --- /dev/null +++ b/src/router/customer.js @@ -0,0 +1,112 @@ + +export default [ + { + path: '/customer/list', + name: 'app-user-list', + component: () => import('@/views/customer/List.vue'), + meta: { + breadcrumb: [ + {title: 'خانه', url: '/'}, + {title: 'مشتریان', active: true} + ], + pageTitle: 'لیست مشتریان', + rule: 'editor' + } + }, + { + path: '/customer/view/:userId', + name: 'app-user-view', + component: () => import('@/views/apps/user/UserView.vue'), + meta: { + breadcrumb: [ + {title: 'Home', url: '/'}, + {title: 'User'}, + {title: 'View', active: true} + ], + pageTitle: 'User View', + rule: 'editor' + } + }, + { + path: '/apps/user/user-edit/:userId', + name: 'app-user-edit', + component: () => import('@/views/apps/user/user-edit/UserEdit.vue'), + meta: { + breadcrumb: [ + {title: 'Home', url: '/'}, + {title: 'User'}, + {title: 'Edit', active: true} + ], + pageTitle: 'User Edit', + rule: 'editor' + } + }, + { + path: '/customer/edit/:id', + name: 'edit-customer', + component: () => import('@/views/apps/customer/Edit.vue'), + meta: { + breadcrumb: [ + {title: 'خانه', url: '/'}, + {title: 'مشتریان'}, + {title: 'ویرایش', active: true} + ], + pageTitle: 'ویرایش مشتری', + rule: 'editor' + } + }, + { + path: '/customer/add', + name: 'add-customer', + component: () => import('@/views/apps/customer/AddCustomer.vue'), + meta: { + breadcrumb: [ + {title: 'خانه', url: '/'}, + {title: 'مشتریان'}, + {title: 'افزودن مشتری', active: true} + ], + pageTitle: 'افزودن مشتری', + rule: 'editor' + } + }, + + + + + + + + + { + path: '/apps/finance/bag-list', + component: () => import('@/views/apps/finance/BagList.vue'), + meta: { + rule: 'editor', + parent: 'finance', + no_scroll: true + } + }, + { + path: '/apps/finance/debit-list', + component: () => import('@/views/apps/finance/DebitList.vue'), + meta: { + rule: 'editor', + parent: 'finance', + no_scroll: true + } + }, + + { + path: '/pages/user-settings', + name: 'page-user-settings', + component: () => import('@/views/pages/user-settings/UserSettings.vue'), + meta: { + breadcrumb: [ + {title: 'خانه', url: '/'}, + {title: 'پروفایل کاربری', active: true}, + ], + pageTitle: 'پروفایل کاربری', + rule: 'editor' + } + } +] diff --git a/src/router/dashboard.js b/src/router/dashboard.js new file mode 100644 index 0000000..31a54ed --- /dev/null +++ b/src/router/dashboard.js @@ -0,0 +1,23 @@ +export default [ + { + path: '/', + name: 'dashboard', + redirect: '/dashboard/analytics' + }, + { + path: '/dashboard/analytics', + name: 'dashboard-analytics', + component: () => import('@/views/DashboardAnalytics.vue'), + meta: { + rule: 'editor' + } + }, + { + path: '/dashboard/ecommerce', + name: 'dashboard-ecommerce', + component: () => import('@/views/DashboardECommerce.vue'), + meta:{ + rule: 'admin' + } + }, +] diff --git a/src/router/full.js b/src/router/full.js new file mode 100644 index 0000000..92eddf1 --- /dev/null +++ b/src/router/full.js @@ -0,0 +1,79 @@ +export default [ + // ============================================================================= + // FULL PAGE LAYOUTS + // ============================================================================= + { + path: '', + component: () => import('@/layouts/full-page/FullPage.vue'), + children: [ + // ============================================================================= + // PAGES + // ============================================================================= + { + path: '/callback', + name: 'auth-callback', + component: () => import('@/views/Callback.vue'), + meta: { + rule: 'editor' + } + }, + { + path: '/auth/login', + name: 'page-login', + component: () => import('@/views/auth/Login.vue'), + meta: { + rule: 'editor' + } + }, + { + path: '/auth/register', + name: 'page-register', + component: () => import('@/views/pages/register/Register.vue'), + meta: { + rule: 'editor' + } + }, + { + path: '/auth/forgot-password', + name: 'page-forgot-password', + component: () => import('@/views/pages/ForgotPassword.vue'), + meta: { + rule: 'editor' + } + }, + + { + path: '/pages/error-404', + name: 'page-error-404', + component: () => import('@/views/pages/Error404.vue'), + meta: { + rule: 'editor' + } + }, + { + path: '/pages/error-500', + name: 'page-error-500', + component: () => import('@/views/pages/Error500.vue'), + meta: { + rule: 'editor' + } + }, + { + path: '/pages/not-authorized', + name: 'page-not-authorized', + component: () => import('@/views/pages/NotAuthorized.vue'), + meta: { + rule: 'editor' + } + }, + { + path: '/pages/maintenance', + name: 'page-maintenance', + component: () => import('@/views/pages/Maintenance.vue'), + meta: { + rule: 'editor' + } + } + ] + }, +] diff --git a/src/router/manage.js b/src/router/manage.js new file mode 100644 index 0000000..21352e0 --- /dev/null +++ b/src/router/manage.js @@ -0,0 +1,35 @@ +export default [ + { + path: '/config/manage', + redirect: '/config/manage/logs', + name: 'manage' + }, + { + path: '/config/manage/logs', + component: () => import('@/views/apps/logs/LogsList.vue'), + meta: { + rule: 'editor', + parent: 'manage', + no_scroll: true + } + }, + { + path: '/config/manage/rules', + component: () => import('@/views/apps/logs/Rules.vue'), + meta: { + rule: 'editor', + parent: 'manage', + no_scroll: true + } + }, + + { + path: '/config/manage/const', + component: () => import('@/views/manage/Const.vue'), + meta: { + rule: 'editor', + parent: 'manage', + no_scroll: true + } + }, +] diff --git a/src/router/order.js b/src/router/order.js new file mode 100644 index 0000000..301bbde --- /dev/null +++ b/src/router/order.js @@ -0,0 +1,38 @@ +export default [ + { + path: '/apps/finance/order-list', + component: () => import('@/views/apps/finance/OrderList.vue'), + meta: { + rule: 'editor', + parent: 'finance', + no_scroll: true + } + }, + + // Order + { + path: '/order', + redirect: '/order/list', + name: 'order' + }, + { + path: '/order/list', + component: () => import('@/views/order/List.vue'), + meta: { + rule: 'editor', + parent: 'order', + no_scroll: true + } + }, + + + { + path: '/apps/finance/order-list', + component: () => import('@/views/apps/finance/OrderList.vue'), + meta: { + rule: 'editor', + parent: 'finance', + no_scroll: true + } + }, +] diff --git a/src/router/product.js b/src/router/product.js new file mode 100644 index 0000000..ab5872e --- /dev/null +++ b/src/router/product.js @@ -0,0 +1,55 @@ +export default [ + { + path: '/apps/product', + redirect: '/apps/product/list', + name: 'product' + }, + { + path: '/apps/product/add', + component: () => import('@/views/apps/product/AddProduct.vue'), + meta: { + rule: 'editor', + parent: 'product', + no_scroll: true + } + }, + { + path: '/apps/product/edit/:id', + name: 'product-edit', + component: () => import('@/views/apps/product/EditProduct.vue'), + meta: { + rule: 'editor', + parent: 'product', + no_scroll: true + } + }, + { + path: '/apps/product/variant/add', + component: () => import('@/views/apps/product/Varaint.vue'), + meta: { + rule: 'editor', + parent: 'product', + no_scroll: true + } + }, + { + path: '/apps/product/variant/edit/:id', + name: 'variant-edit', + component: () => import('@/views/apps/product/EditVariant.vue'), + meta: { + rule: 'editor', + parent: 'product', + no_scroll: true + } + }, + { + path: '/apps/product/list', + name: 'product-list', + component: () => import('@/views/apps/product/ProductList.vue'), + meta: { + rule: 'editor', + parent: 'product', + no_scroll: true + } + } +] diff --git a/src/router/temp.js b/src/router/temp.js new file mode 100644 index 0000000..5e960db --- /dev/null +++ b/src/router/temp.js @@ -0,0 +1,1182 @@ +export default [ + // { + // path: '/apps/todo/:filter', + // component: () => import('@/views/apps/todo/Todo.vue'), + // meta: { + // rule: 'editor', + // parent: 'todo', + // no_scroll: true + // } + // }, + // { + // path: '/apps/chat', + // name: 'chat', + // component: () => import('@/views/apps/chat/Chat.vue'), + // meta: { + // rule: 'editor', + // no_scroll: true + // } + // }, + // { + // path: '/apps/email', + // redirect: '/apps/email/inbox', + // name: 'email' + // }, + // { + // path: '/apps/email/:filter', + // component: () => import('@/views/apps/email/Email.vue'), + // meta: { + // rule: 'editor', + // parent: 'email', + // no_scroll: true + // } + // }, + // { + // path: '/apps/calendar/vue-simple-calendar', + // name: 'calendar-simple-calendar', + // component: () => import('@/views/apps/calendar/SimpleCalendar.vue'), + // meta: { + // rule: 'editor', + // no_scroll: true + // } + // }, + // { + // path: '/apps/eCommerce/shop', + // name: 'ecommerce-shop', + // component: () => import('@/views/apps/eCommerce/ECommerceShop.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'eCommerce'}, + // { title: 'Shop', active: true } + // ], + // pageTitle: 'Shop', + // rule: 'editor' + // } + // }, + // { + // path: '/apps/eCommerce/wish-list', + // name: 'ecommerce-wish-list', + // component: () => import('@/views/apps/eCommerce/ECommerceWishList.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'eCommerce', url:'/apps/eCommerce/shop'}, + // { title: 'Wish List', active: true } + // ], + // pageTitle: 'Wish List', + // rule: 'editor' + // } + // }, + // { + // path: '/apps/eCommerce/checkout', + // name: 'ecommerce-checkout', + // component: () => import('@/views/apps/eCommerce/ECommerceCheckout.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'eCommerce', url:'/apps/eCommerce/shop'}, + // { title: 'Checkout', active: true } + // ], + // pageTitle: 'Checkout', + // rule: 'editor' + // } + // }, + /* + Below route is for demo purpose + You can use this route in your app + { + path: '/apps/eCommerce/item/', + name: 'ecommerce-item-detail-view', + redirect: '/apps/eCommerce/shop', + } + */ + // { + // path: '/apps/eCommerce/item/', + // redirect: '/apps/eCommerce/item/5546604' + // }, + // { + // path: '/apps/eCommerce/item/:item_id', + // name: 'ecommerce-item-detail-view', + // component: () => import('@/views/apps/eCommerce/ECommerceItemDetailView.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'eCommerce'}, + // { title: 'Shop', url: {name: 'ecommerce-shop'} }, + // { title: 'Item Details', active: true } + // ], + // parent: 'ecommerce-item-detail-view', + // pageTitle: 'Item Details', + // rule: 'editor' + // } + // }, + + // ============================================================================= + // COMPONENT ROUTES + // ============================================================================= + // { + // path: '/components/alert', + // name: 'component-alert', + // component: () => import('@/views/components/vuesax/alert/Alert.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Components' }, + // { title: 'Alert', active: true } + // ], + // pageTitle: 'Alert', + // rule: 'editor' + // } + // }, + // { + // path: '/components/avatar', + // name: 'component-avatar', + // component: () => import('@/views/components/vuesax/avatar/Avatar.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Components' }, + // { title: 'Avatar', active: true } + // ], + // pageTitle: 'Avatar', + // rule: 'editor' + // } + // }, + // { + // path: '/components/breadcrumb', + // name: 'component-breadcrumb', + // component: () => import('@/views/components/vuesax/breadcrumb/Breadcrumb.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Components' }, + // { title: 'Breadcrumb', active: true } + // ], + // pageTitle: 'Breadcrumb', + // rule: 'editor' + // } + // }, + // { + // path: '/components/button', + // name: 'component-button', + // component: () => import('@/views/components/vuesax/button/Button.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Components' }, + // { title: 'Button', active: true } + // ], + // pageTitle: 'Button', + // rule: 'editor' + // } + // }, + // { + // path: '/components/button-group', + // name: 'component-button-group', + // component: () => import('@/views/components/vuesax/button-group/ButtonGroup.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Components' }, + // { title: 'Button Group', active: true } + // ], + // pageTitle: 'Button Group', + // rule: 'editor' + // } + // }, + // { + // path: '/components/chip', + // name: 'component-chip', + // component: () => import('@/views/components/vuesax/chip/Chip.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Components' }, + // { title: 'Chip', active: true } + // ], + // pageTitle: 'Chip', + // rule: 'editor' + // } + // }, + // { + // path: '/components/collapse', + // name: 'component-collapse', + // component: () => import('@/views/components/vuesax/collapse/Collapse.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Components' }, + // { title: 'Collapse', active: true } + // ], + // pageTitle: 'Collapse', + // rule: 'editor' + // } + // }, + // { + // path: '/components/dialogs', + // name: 'component-dialog', + // component: () => import('@/views/components/vuesax/dialogs/Dialogs.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Components' }, + // { title: 'Dialogs', active: true } + // ], + // pageTitle: 'Dialogs', + // rule: 'editor' + // } + // }, + // { + // path: '/components/divider', + // name: 'component-divider', + // component: () => import('@/views/components/vuesax/divider/Divider.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Components' }, + // { title: 'Divider', active: true } + // ], + // pageTitle: 'Divider', + // rule: 'editor' + // } + // }, + // { + // path: '/components/dropdown', + // name: 'component-drop-down', + // component: () => import('@/views/components/vuesax/dropdown/Dropdown.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Components' }, + // { title: 'Dropdown', active: true } + // ], + // pageTitle: 'Dropdown', + // rule: 'editor' + // } + // }, + // { + // path: '/components/list', + // name: 'component-list', + // component: () => import('@/views/components/vuesax/list/List.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Components' }, + // { title: 'List', active: true } + // ], + // pageTitle: 'List', + // rule: 'editor' + // } + // }, + // { + // path: '/components/loading', + // name: 'component-loading', + // component: () => import('@/views/components/vuesax/loading/Loading.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Components' }, + // { title: 'Loading', active: true } + // ], + // pageTitle: 'Loading', + // rule: 'editor' + // } + // }, + // { + // path: '/components/navbar', + // name: 'component-navbar', + // component: () => import('@/views/components/vuesax/navbar/Navbar.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Components' }, + // { title: 'Navbar', active: true } + // ], + // pageTitle: 'Navbar', + // rule: 'editor' + // } + // }, + // { + // path: '/components/notifications', + // name: 'component-notifications', + // component: () => import('@/views/components/vuesax/notifications/Notifications.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Components' }, + // { title: 'Notifications', active: true } + // ], + // pageTitle: 'Notifications', + // rule: 'editor' + // } + // }, + // { + // path: '/components/pagination', + // name: 'component-pagination', + // component: () => import('@/views/components/vuesax/pagination/Pagination.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Components' }, + // { title: 'Pagination', active: true } + // ], + // pageTitle: 'Pagination', + // rule: 'editor' + // } + // }, + // { + // path: '/components/popup', + // name: 'component-popup', + // component: () => import('@/views/components/vuesax/popup/Popup.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Components' }, + // { title: 'Popup', active: true } + // ], + // pageTitle: 'Popup', + // rule: 'editor' + // } + // }, + // { + // path: '/components/progress', + // name: 'component-progress', + // component: () => import('@/views/components/vuesax/progress/Progress.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Components' }, + // { title: 'Progress', active: true } + // ], + // pageTitle: 'Progress', + // rule: 'editor' + // } + // }, + // { + // path: '/components/sidebar', + // name: 'component-sidebar', + // component: () => import('@/views/components/vuesax/sidebar/Sidebar.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Components' }, + // { title: 'Sidebar', active: true } + // ], + // pageTitle: 'Sidebar', + // rule: 'editor' + // } + // }, + // { + // path: '/components/slider', + // name: 'component-slider', + // component: () => import('@/views/components/vuesax/slider/Slider.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Components' }, + // { title: 'Slider', active: true } + // ], + // pageTitle: 'Slider', + // rule: 'editor' + // } + // }, + // { + // path: '/components/tabs', + // name: 'component-tabs', + // component: () => import('@/views/components/vuesax/tabs/Tabs.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Components' }, + // { title: 'Tabs', active: true } + // ], + // pageTitle: 'Tabs', + // rule: 'editor' + // } + // }, + // { + // path: '/components/tooltip', + // name: 'component-tooltip', + // component: () => import('@/views/components/vuesax/tooltip/Tooltip.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Components' }, + // { title: 'Tooltip', active: true } + // ], + // pageTitle: 'Tooltip', + // rule: 'editor' + // } + // }, + // { + // path: '/components/upload', + // name: 'component-upload', + // component: () => import('@/views/components/vuesax/upload/Upload.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Components' }, + // { title: 'Upload', active: true } + // ], + // pageTitle: 'Upload', + // rule: 'editor' + // } + // }, + + + // ============================================================================= + // FORMS + // ============================================================================= + // ============================================================================= + // FORM ELEMENTS + // ============================================================================= + // { + // path: '/forms/form-elements/select', + // name: 'form-element-select', + // component: () => import('@/views/forms/form-elements/select/Select.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Form Elements' }, + // { title: 'Select', active: true } + // ], + // pageTitle: 'Select', + // rule: 'editor' + // } + // }, + // { + // path: '/forms/form-elements/switch', + // name: 'form-element-switch', + // component: () => import('@/views/forms/form-elements/switch/Switch.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Form Elements' }, + // { title: 'Switch', active: true } + // ], + // pageTitle: 'Switch', + // rule: 'editor' + // } + // }, + // { + // path: '/forms/form-elements/checkbox', + // name: 'form-element-checkbox', + // component: () => import('@/views/forms/form-elements/checkbox/Checkbox.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Form Elements' }, + // { title: 'Checkbox', active: true } + // ], + // pageTitle: 'Checkbox', + // rule: 'editor' + // } + // }, + // { + // path: '/forms/form-elements/radio', + // name: 'form-element-radio', + // component: () => import('@/views/forms/form-elements/radio/Radio.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Form Elements' }, + // { title: 'Radio', active: true } + // ], + // pageTitle: 'Radio', + // rule: 'editor' + // } + // }, + // { + // path: '/forms/form-elements/input', + // name: 'form-element-input', + // component: () => import('@/views/forms/form-elements/input/Input.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Form Elements' }, + // { title: 'Input', active: true } + // ], + // pageTitle: 'Input', + // rule: 'editor' + // } + // }, + // { + // path: '/forms/form-elements/number-input', + // name: 'form-element-number-input', + // component: () => import('@/views/forms/form-elements/number-input/NumberInput.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Form Elements' }, + // { title: 'Number Input', active: true } + // ], + // pageTitle: 'Number Input', + // rule: 'editor' + // } + // }, + // { + // path: '/forms/form-elements/textarea', + // name: 'form-element-textarea', + // component: () => import('@/views/forms/form-elements/textarea/Textarea.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Form Elements' }, + // { title: 'Textarea', active: true } + // ], + // pageTitle: 'Textarea', + // rule: 'editor' + // } + // }, + // ------------------------------------------------------------------------------------------------------------------------------------------- + // { + // path: '/forms/form-layouts', + // name: 'forms-form-layouts', + // component: () => import('@/views/forms/FormLayouts.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Forms' }, + // { title: 'Form Layouts', active: true } + // ], + // pageTitle: 'Form Layouts', + // rule: 'editor' + // } + // }, + // { + // path: '/forms/form-wizard', + // name: 'extra-component-form-wizard', + // component: () => import('@/views/forms/form-wizard/FormWizard.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Extra Components' }, + // { title: 'Form Wizard', active: true } + // ], + // pageTitle: 'Form Wizard', + // rule: 'editor' + // } + // }, + // { + // path: '/forms/form-validation', + // name: 'extra-component-form-validation', + // component: () => import('@/views/forms/form-validation/FormValidation.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Extra Components' }, + // { title: 'Form Validation', active: true } + // ], + // pageTitle: 'Form Validation', + // rule: 'editor' + // } + // }, + // { + // path: '/forms/form-input-group', + // name: 'extra-component-form-input-group', + // component: () => import('@/views/forms/form-input-group/FormInputGroup.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Extra Components' }, + // { title: 'Form Input Group', active: true } + // ], + // pageTitle: 'Form Input Group', + // rule: 'editor' + // } + // }, + + // ============================================================================= + // Pages Routes + // ============================================================================= + // { + // path: '/pages/profile', + // name: 'page-profile', + // component: () => import('@/views/pages/Profile.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Pages' }, + // { title: 'Profile', active: true } + // ], + // pageTitle: 'Profile', + // rule: 'editor' + // } + // }, + // ============================================================================= + // UI ELEMENTS + // ============================================================================= + { + path: '/ui-elements/data-list/list-view', + name: 'data-list-list-view', + component: () => import('@/views/ui-elements/data-list/list-view/DataListListView.vue'), + meta: { + breadcrumb: [ + {title: 'Home', url: '/'}, + {title: 'Data List'}, + {title: 'List View', active: true} + ], + pageTitle: 'List View', + rule: 'editor' + } + }, + { + path: '/ui-elements/data-list/thumb-view', + name: 'data-list-thumb-view', + component: () => import('@/views/ui-elements/data-list/thumb-view/DataListThumbView.vue'), + meta: { + breadcrumb: [ + {title: 'Home', url: '/'}, + {title: 'Data List'}, + {title: 'Thumb View', active: true} + ], + pageTitle: 'Thumb View', + rule: 'editor' + } + }, + { + path: '/ui-elements/grid/vuesax', + name: 'grid-vuesax', + component: () => import('@/views/ui-elements/grid/vuesax/GridVuesax.vue'), + meta: { + breadcrumb: [ + {title: 'Home', url: '/'}, + {title: 'Grid'}, + {title: 'Vuesax', active: true} + ], + pageTitle: 'Grid', + rule: 'editor' + } + }, + { + path: '/ui-elements/grid/tailwind', + name: 'grid-tailwind', + component: () => import('@/views/ui-elements/grid/tailwind/GridTailwind.vue'), + meta: { + breadcrumb: [ + {title: 'Home', url: '/'}, + {title: 'Grid'}, + {title: 'Tailwind', active: true} + ], + pageTitle: 'Tailwind Grid', + rule: 'editor' + } + }, + { + path: '/ui-elements/colors', + name: 'colors', + component: () => import('@/views/ui-elements/colors/Colors.vue'), + meta: { + breadcrumb: [ + {title: 'Home', url: '/'}, + {title: 'Colors', active: true} + ], + pageTitle: 'Colors', + rule: 'editor' + } + }, + { + path: '/ui-elements/card/basic', + name: 'basic-cards', + component: () => import('@/views/ui-elements/card/CardBasic.vue'), + meta: { + breadcrumb: [ + {title: 'Home', url: '/'}, + {title: 'Card'}, + {title: 'Basic Cards', active: true} + ], + pageTitle: 'Basic Cards', + rule: 'editor' + } + }, + { + path: '/ui-elements/card/statistics', + name: 'statistics-cards', + component: () => import('@/views/ui-elements/card/CardStatistics.vue'), + meta: { + breadcrumb: [ + {title: 'Home', url: '/'}, + {title: 'Card'}, + {title: 'Statistics Cards', active: true} + ], + pageTitle: 'Statistics Card', + rule: 'editor' + } + }, + { + path: '/ui-elements/card/analytics', + name: 'analytics-cards', + component: () => import('@/views/ui-elements/card/CardAnalytics.vue'), + meta: { + breadcrumb: [ + {title: 'Home', url: '/'}, + {title: 'Card'}, + {title: 'Analytics Card', active: true} + ], + pageTitle: 'Analytics Card', + rule: 'editor' + } + }, + { + path: '/ui-elements/card/card-actions', + name: 'card-actions', + component: () => import('@/views/ui-elements/card/CardActions.vue'), + meta: { + breadcrumb: [ + {title: 'Home', url: '/'}, + {title: 'Card'}, + {title: 'Card Actions', active: true} + ], + pageTitle: 'Card Actions', + rule: 'editor' + } + }, + { + path: '/ui-elements/card/card-colors', + name: 'card-colors', + component: () => import('@/views/ui-elements/card/CardColors.vue'), + meta: { + breadcrumb: [ + {title: 'Home', url: '/'}, + {title: 'Card'}, + {title: 'Card Colors', active: true} + ], + pageTitle: 'Card Colors', + rule: 'editor' + } + }, + { + path: '/ui-elements/table', + name: 'table', + component: () => import('@/views/ui-elements/table/Table.vue'), + meta: { + breadcrumb: [ + {title: 'Home', url: '/'}, + {title: 'Table', active: true} + ], + pageTitle: 'Table', + rule: 'editor' + } + }, + { + path: '/ui-elements/ag-grid-table', + name: 'ag-grid-table', + component: () => import('@/views/ui-elements/ag-grid-table/AgGridTable.vue'), + meta: { + breadcrumb: [ + {title: 'Home', url: '/'}, + {title: 'agGrid Table', active: true} + ], + pageTitle: 'agGrid Table', + rule: 'editor' + } + }, + + + // { + // path: '/pages/faq', + // name: 'page-faq', + // component: () => import('@/views/pages/Faq.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Pages' }, + // { title: 'FAQ', active: true } + // ], + // pageTitle: 'FAQ', + // rule: 'editor' + // } + // }, + // { + // path: '/pages/knowledge-base', + // name: 'page-knowledge-base', + // component: () => import('@/views/pages/KnowledgeBase.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Pages' }, + // { title: 'KnowledgeBase', active: true } + // ], + // pageTitle: 'KnowledgeBase', + // rule: 'editor' + // } + // }, + // { + // path: '/pages/knowledge-base/category', + // name: 'page-knowledge-base-category', + // component: () => import('@/views/pages/KnowledgeBaseCategory.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Pages' }, + // { title: 'KnowledgeBase', url: '/pages/knowledge-base' }, + // { title: 'Category', active: true } + // ], + // parent: 'page-knowledge-base', + // rule: 'editor' + // } + // }, + // { + // path: '/pages/knowledge-base/category/question', + // name: 'page-knowledge-base-category-question', + // component: () => import('@/views/pages/KnowledgeBaseCategoryQuestion.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Pages' }, + // { title: 'KnowledgeBase', url: '/pages/knowledge-base' }, + // { title: 'Category', url: '/pages/knowledge-base/category' }, + // { title: 'Question', active: true } + // ], + // parent: 'page-knowledge-base', + // rule: 'editor' + // } + // }, + // { + // path: '/pages/search', + // name: 'page-search', + // component: () => import('@/views/pages/Search.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Pages' }, + // { title: 'Search', active: true } + // ], + // pageTitle: 'Search', + // rule: 'editor' + // } + // }, + // { + // path: '/pages/invoice', + // name: 'page-invoice', + // component: () => import('@/views/pages/Invoice.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Pages' }, + // { title: 'Invoice', active: true } + // ], + // pageTitle: 'Invoice', + // rule: 'editor' + // } + // }, + + // ============================================================================= + // CHARTS & MAPS + // ============================================================================= + // { + // path: '/charts-and-maps/charts/apex-charts', + // name: 'extra-component-charts-apex-charts', + // component: () => import('@/views/charts-and-maps/charts/apex-charts/ApexCharts.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Charts & Maps' }, + // { title: 'Apex Charts', active: true } + // ], + // pageTitle: 'Apex Charts', + // rule: 'editor' + // } + // }, + // { + // path: '/charts-and-maps/charts/chartjs', + // name: 'extra-component-charts-chartjs', + // component: () => import('@/views/charts-and-maps/charts/chartjs/Chartjs.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Charts & Maps' }, + // { title: 'chartjs', active: true } + // ], + // pageTitle: 'chartjs', + // rule: 'editor' + // } + // }, + // { + // path: '/charts-and-maps/charts/echarts', + // name: 'extra-component-charts-echarts', + // component: () => import('@/views/charts-and-maps/charts/echarts/Echarts.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Charts & Maps' }, + // { title: 'echarts', active: true } + // ], + // pageTitle: 'echarts', + // rule: 'editor' + // } + // }, + // { + // path: '/charts-and-maps/maps/google-map', + // name: 'extra-component-maps-google-map', + // component: () => import('@/views/charts-and-maps/maps/google-map/GoogleMap.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Charts & Maps' }, + // { title: 'Google Map', active: true } + // ], + // pageTitle: 'Google Map', + // rule: 'editor' + // } + // }, + + + // ============================================================================= + // EXTENSIONS + // ============================================================================= + // { + // path: '/extensions/select', + // name: 'extra-component-select', + // component: () => import('@/views/components/extra-components/select/Select.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Extra Components' }, + // { title: 'Select', active: true } + // ], + // pageTitle: 'Select', + // rule: 'editor' + // } + // }, + // { + // path: '/extensions/quill-editor', + // name: 'extra-component-quill-editor', + // component: () => import('@/views/components/extra-components/quill-editor/QuillEditor.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Extra Components' }, + // { title: 'Quill Editor', active: true } + // ], + // pageTitle: 'Quill Editor', + // rule: 'editor' + // } + // }, + // { + // path: '/extensions/drag-and-drop', + // name: 'extra-component-drag-and-drop', + // component: () => import('@/views/components/extra-components/drag-and-drop/DragAndDrop.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Extra Components' }, + // { title: 'Drag & Drop', active: true } + // ], + // pageTitle: 'Drag & Drop', + // rule: 'editor' + // } + // }, + // { + // path: '/extensions/datepicker', + // name: 'extra-component-datepicker', + // component: () => import('@/views/components/extra-components/datepicker/Datepicker.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Extra Components' }, + // { title: 'Datepicker', active: true } + // ], + // pageTitle: 'Datepicker', + // rule: 'editor' + // } + // }, + // { + // path: '/extensions/datetime-picker', + // name: 'extra-component-datetime-picker', + // component: () => import('@/views/components/extra-components/datetime-picker/DatetimePicker.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Extra Components' }, + // { title: 'Datetime Picker', active: true } + // ], + // pageTitle: 'Datetime Picker', + // rule: 'editor' + // } + // }, + // { + // path: '/extensions/access-control', + // name: 'extra-component-access-control', + // component: () => import('@/views/components/extra-components/access-control/AccessControl.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Extensions' }, + // { title: 'Access Control', active: true } + // ], + // pageTitle: 'Access Control', + // rule: 'editor' + // } + // }, + // { + // path: '/extensions/i18n', + // name: 'extra-component-i18n', + // component: () => import('@/views/components/extra-components/I18n.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Extensions' }, + // { title: 'I18n', active: true } + // ], + // pageTitle: 'I18n', + // rule: 'editor' + // } + // }, + // { + // path: '/extensions/carousel', + // name: 'extra-component-carousel', + // component: () => import('@/views/components/extra-components/carousel/Carousel.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Extensions' }, + // { title: 'Carousel', active: true } + // ], + // pageTitle: 'Carousel', + // rule: 'editor' + // } + // }, + // { + // path: '/extensions/clipboard', + // name: 'extra-component-clipboard', + // component: () => import('@/views/components/extra-components/clipboard/Clipboard.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Extensions' }, + // { title: 'Clipboard', active: true } + // ], + // pageTitle: 'Clipboard', + // rule: 'editor' + // } + // }, + // { + // path: '/extensions/context-menu', + // name: 'extra-component-context-menu', + // component: () => import('@/views/components/extra-components/context-menu/ContextMenu.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Extensions' }, + // { title: 'Context Menu', active: true } + // ], + // pageTitle: 'Context Menu', + // rule: 'editor' + // } + // }, + // { + // path: '/extensions/star-ratings', + // name: 'extra-component-star-ratings', + // component: () => import('@/views/components/extra-components/star-ratings/StarRatings.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Extensions' }, + // { title: 'Star Ratings', active: true } + // ], + // pageTitle: 'Star Ratings', + // rule: 'editor' + // } + // }, + // { + // path: '/extensions/autocomplete', + // name: 'extra-component-autocomplete', + // component: () => import('@/views/components/extra-components/autocomplete/Autocomplete.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Extensions' }, + // { title: 'Autocomplete', active: true } + // ], + // pageTitle: 'Autocomplete', + // rule: 'editor' + // } + // }, + // { + // path: '/extensions/tree', + // name: 'extra-component-tree', + // component: () => import('@/views/components/extra-components/tree/Tree.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Extensions' }, + // { title: 'Tree', active: true } + // ], + // pageTitle: 'Tree', + // rule: 'editor' + // } + // }, + // { + // path: '/import-export/import', + // name: 'import-excel', + // component: () => import('@/views/components/extra-components/import-export/Import.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Extensions' }, + // { title: 'Import/Export' }, + // { title: 'Import', active: true } + // ], + // pageTitle: 'Import Excel', + // rule: 'editor' + // } + // }, + // { + // path: '/import-export/export', + // name: 'export-excel', + // component: () => import('@/views/components/extra-components/import-export/Export.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Extensions' }, + // { title: 'Import/Export' }, + // { title: 'Export', active: true } + // ], + // pageTitle: 'Export Excel', + // rule: 'editor' + // } + // }, + // { + // path: '/import-export/export-selected', + // name: 'export-excel-selected', + // component: () => import('@/views/components/extra-components/import-export/ExportSelected.vue'), + // meta: { + // breadcrumb: [ + // { title: 'Home', url: '/' }, + // { title: 'Extensions' }, + // { title: 'Import/Export' }, + // { title: 'Export Selected', active: true } + // ], + // pageTitle: 'Export Excel', + // rule: 'editor' + // } + // } + + + // { + // path: '/pages/reset-password', + // name: 'page-reset-password', + // component: () => import('@/views/pages/ResetPassword.vue'), + // meta: { + // rule: 'editor' + // } + // }, + // { + // path: '/pages/lock-screen', + // name: 'page-lock-screen', + // component: () => import('@/views/pages/LockScreen.vue'), + // meta: { + // rule: 'editor' + // } + // }, + // { + // path: '/pages/comingsoon', + // name: 'page-coming-soon', + // component: () => import('@/views/pages/ComingSoon.vue'), + // meta: { + // rule: 'editor' + // } + // }, +] diff --git a/src/store/access/access.js b/src/store/access/access.js new file mode 100644 index 0000000..ac552a1 --- /dev/null +++ b/src/store/access/access.js @@ -0,0 +1,49 @@ +import axios from '@/axios' + + +const state = { + loading: false, + access_id:undefined +}; + +const actions = { + + async save({commit}, payload) { + try { + commit('LOADING', true); + await axios.post('admin/permission',{data: payload}); + } catch (e) { + throw e; + } finally { + commit('LOADING', false); + } + }, + async getOneId({commit}, payload) { + try { + commit('LOADING', true); + const {data} = await axios.get(`admin/permission/${payload}`) + commit('ACCESS_ID', data); + } catch (e) { + throw e; + } finally { + commit('LOADING', false); + } + } + +} + +const mutations = { + LOADING(state, payload) { + state.loading = payload; + }, + ACCESS_ID(state, payload) { + state.access_id = payload; + } +}; + +export default { + namespaced: true, + state, + mutations, + actions +} diff --git a/src/store/actions.js b/src/store/actions.js new file mode 100644 index 0000000..22b62d5 --- /dev/null +++ b/src/store/actions.js @@ -0,0 +1,91 @@ + +import axios from '@/axios' +import { notification } from 'ant-design-vue'; + +const actions = { + + // ///////////////////////////////////////////// + // COMPONENTS + // ///////////////////////////////////////////// + + // async SubmitUser({commit}, payload) { + // + // try { + // + // commit('LOADING', true); + // + // await axios({ + // method: 'post', + // url: 'admin/user', + // data: {data:payload} + // }) + // + // commit('INIT', payload); + // + // setTimeout(()=>{ + // notification.success({ + // message:"پیغام موفقیت آمیز", + // description:"دسته شما با موفقیت ثبت شد." + // }) + // },500) + // + // } catch (e) { + // console.log('error has') + // commit('ERROR', e); + // } finally { + // commit('LOADING', false); + // } + // + // }, + + + + + // Vertical NavMenu + updateVerticalNavMenuWidth ({ commit }, width) { + commit('UPDATE_VERTICAL_NAV_MENU_WIDTH', width) + }, + + // VxAutoSuggest + updateStarredPage ({ commit }, payload) { + commit('UPDATE_STARRED_PAGE', payload) + }, + + // The Navbar + arrangeStarredPagesLimited ({ commit }, list) { + commit('ARRANGE_STARRED_PAGES_LIMITED', list) + }, + arrangeStarredPagesMore ({ commit }, list) { + commit('ARRANGE_STARRED_PAGES_MORE', list) + }, + + // ///////////////////////////////////////////// + // UI + // ///////////////////////////////////////////// + + toggleContentOverlay ({ commit }) { + commit('TOGGLE_CONTENT_OVERLAY') + }, + updateTheme ({ commit }, val) { + commit('UPDATE_THEME', val) + }, + + // ///////////////////////////////////////////// + // User/Account + // ///////////////////////////////////////////// + + updateUserInfo ({ commit }, payload) { + commit('UPDATE_USER_INFO', payload) + }, + updateUserRole ({ dispatch }, payload) { + // Change client side + payload.aclChangeRole(payload.userRole) + + // Make API call to server for changing role + + // Change userInfo in localStorage and store + dispatch('updateUserInfo', {userRole: payload.userRole}) + } +} + +export default actions diff --git a/src/store/adpackage/adpackage.js b/src/store/adpackage/adpackage.js new file mode 100644 index 0000000..3474149 --- /dev/null +++ b/src/store/adpackage/adpackage.js @@ -0,0 +1,72 @@ +import axios from '@/axios' + + +const state = { + loading: false, + AdOneId:undefined, + edit:[] +}; + +const actions = { + + async save({commit}, payload) { + try { + commit('LOADING', true); + await axios.post('admin/ipc',{data: payload}); + } catch (e) { + throw e; + } finally { + commit('LOADING', false); + } + }, + + async get({commit},id) { + try { + commit('LOADING', true); + let res = await axios.get('admin/ipc/'+id); + commit('AdPACKAGE_ID', res.data); + } catch (e) { + commit('ERROR', e); + throw e; + } finally { + commit('LOADING', false); + } + }, + + async put({commit}, payload) { + try{ + commit('LOADING', true); + await axios.put('admin/ipc/'+payload.id, {id:payload.id,data:payload.data}) + commit('UPDATE_ADPACKAGE', payload); + }catch (e) { + commit('ERROR', e); + } finally { + commit('LOADING', false); + } + } + +} + +const mutations = { + LOADING(state, payload) { + state.loading = payload; + }, + AdPACKAGE_ID(state,payload){ + state.AdOneId = payload + }, + UPDATE_ADPACKAGE(state, payload) { + state.edit = state.edit.map(item => { + if (item.id === payload.id) { + return Object.assign({},item, payload.data) + } + return item + }) + } +}; + +export default { + namespaced: true, + state, + mutations, + actions +} diff --git a/src/store/adv/adv.js b/src/store/adv/adv.js new file mode 100644 index 0000000..ca74fe5 --- /dev/null +++ b/src/store/adv/adv.js @@ -0,0 +1,63 @@ +import axios from '@/axios' + +const state = { + collectionSingle: undefined, + error: undefined, + loading: false, + users: [] +}; +const actions = { + async save({commit}, payload) { + try { + commit('LOADING', true); + await axios.put(`admin/adv/${payload.id}`,{data:payload.data,op:'update'}) + commit('INIT', payload); + this.$ntSet(); + } catch (e) { + console.log('error has') + commit('ERROR', e); + } finally { + commit('LOADING', false); + } + }, + async advId({commit}, id) { + try { + commit('LOADING', true); + let res = await axios.get('admin/adv/' + id); + console.log(res.data, 'res-attr') + commit('ADV_ID', res.data); + } catch (e) { + commit('ERROR', e); + throw e; + } finally { + commit('LOADING', false); + } + }, + +}; +const mutations = { + UPDATE_ADV(state, payload) { + state.advEdit = state.advEdit.map(adv => { + if (adv.id === payload.id) { + return Object.assign({}, adv, payload.data) + } + return adv + }) + console.log(state.adv, 'users data kole') + }, + + + LOADING(state, payload) { + state.loading = payload; + }, + ADV_ID(state, payload) { + state.collectionSingle = payload; + }, +}; + +export default { + namespaced: true, + state, + mutations, + actions +} diff --git a/src/store/advertisng/advertising.js b/src/store/advertisng/advertising.js new file mode 100644 index 0000000..a95e4aa --- /dev/null +++ b/src/store/advertisng/advertising.js @@ -0,0 +1,122 @@ +import axios from '@/axios' + +const state = { + loadingSpecifiedDate: false, + loadingCompareAdv: false, + loadingUseAdvPackage: false, + loadingOwnerMarketer: false, + loadingGrowthAdv: false, + loadingLastDaysAdv: false, + loadingAdvOwnerMarketer: false, +}; + +const actions = { + async save({commit}, payload) { + try { + commit('LOADING_SPECIFIED_DATE', true); + const {data} = await axios.post('admin/adv/query/create',payload); + return data; + } catch (e) { + throw e; + } finally { + commit('LOADING_SPECIFIED_DATE', false); + } + }, + async line({commit}, payload) { + try { + commit('LOADING_COMPARE_DATE', true); + const {data} = await axios.post('admin/adv/query/compare',payload); + return data; + } catch (e) { + throw e; + } finally { + commit('LOADING_COMPARE_DATE', false); + } + }, + async donut({commit}, payload) { + try { + commit('LOADING_USE_ADV_PACKAGE', true); + const {data} = await axios.post('admin/adv/chart/ipc',payload); + return data; + } catch (e) { + throw e; + } finally { + commit('LOADING_USE_ADV_PACKAGE', false); + } + }, + async countAdv({commit}, payload) { + try { + commit('LOADING_MARKETER_OWNER', true); + const {data} = await axios.post('admin/adv/query/city',payload); + return data; + } catch (e) { + throw e; + } finally { + commit('LOADING_MARKETER_OWNER', false); + } + }, + async growthAdv({commit}, payload) { + try { + commit('LOADING_GROWTH_ADV', true); + const {data} = await axios.post('admin/adv/chart/growth',payload); + return data; + } catch (e) { + throw e; + } finally { + commit('LOADING_GROWTH_ADV', false); + } + }, + async lastDaysAdv({commit}, payload) { + try { + commit('LOADING_LAST_DAY_ADV', true); + const {data} = await axios.post('admin/adv/chart/count',payload); + return data; + } catch (e) { + throw e; + } finally { + commit('LOADING_LAST_DAY_ADV', false); + } + }, + async countOwnerMarketer({commit}, payload) { + try { + commit('LOADING_OWNER_MARKETER', true); + const {data} = await axios.post('admin/adv/query/creator',payload); + return data; + } catch (e) { + throw e; + } finally { + commit('LOADING_OWNER_MARKETER', false); + } + }, +} + +const mutations = { + LOADING_SPECIFIED_DATE(state, payload) { + state.loadingSpecifiedDate = payload; + }, + LOADING_COMPARE_DATE(state, payload) { + state.loadingCompareAdv = payload; + }, + LOADING_USE_ADV_PACKAGE(state, payload) { + state.loadingUseAdvPackage = payload; + }, + LOADING_MARKETER_OWNER(state, payload) { + state.loadingOwnerMarketer = payload; + }, + LOADING_GROWTH_ADV(state, payload) { + state.loadingGrowthAdv = payload; + }, + LOADING_LAST_DAY_ADV(state, payload) { + state.loadingLastDaysAdv = payload; + }, + LOADING_OWNER_MARKETER(state, payload) { + state.loadingAdvOwnerMarketer = payload; + }, +} + +export default { + namespaced: true, + state, + mutations, + actions +} diff --git a/src/store/auth/moduleAuth.js b/src/store/auth/moduleAuth.js new file mode 100644 index 0000000..1ef0b8a --- /dev/null +++ b/src/store/auth/moduleAuth.js @@ -0,0 +1,22 @@ +/*========================================================================================= + File Name: moduleAuth.js + Description: Auth Module + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + + +import state from './moduleAuthState.js' +import mutations from './moduleAuthMutations.js' +import actions from './moduleAuthActions.js' +import getters from './moduleAuthGetters.js' + +export default { + namespaced: true, + state: state, + mutations: mutations, + actions: actions, + getters: getters +} diff --git a/src/store/auth/moduleAuthActions.js b/src/store/auth/moduleAuthActions.js new file mode 100644 index 0000000..2a66126 --- /dev/null +++ b/src/store/auth/moduleAuthActions.js @@ -0,0 +1,448 @@ +/*========================================================================================= + File Name: moduleAuthActions.js + Description: Auth Module Actions + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + +import jwt from "../../http/requests/auth/jwt/index.js" + + +import firebase from 'firebase/app' +import 'firebase/auth' +import router from '@/router' +import axios from "../../http/axios"; +import {ax} from "@/axios"; + +export default { + + getUserInfo({commit}) { + /* ax().get('customer/user/get') + .then((res)=>{ + console.log("in get user info ",res.data); + commit("SET_USER_INFO",res.data); + }).catch((error)=>{ + console.log(error); + });*/ + }, + + loginAttempt({dispatch}, payload) { + + // New payload for login action + const newPayload = { + userDetails: payload.userDetails, + notify: payload.notify, + closeAnimation: payload.closeAnimation + } + + // If remember_me is enabled change firebase Persistence + if (!payload.checkbox_remember_me) { + + // Change firebase Persistence + firebase.auth().setPersistence(firebase.auth.Auth.Persistence.SESSION) + + // If success try to login + .then(function () { + dispatch('login', newPayload) + }) + + // If error notify + .catch(function (err) { + + // Close animation if passed as payload + if (payload.closeAnimation) payload.closeAnimation() + + payload.notify({ + time: 2500, + title: 'Error', + text: err.message, + iconPack: 'feather', + icon: 'icon-alert-circle', + color: 'danger' + }) + }) + } else { + // Try to login + dispatch('login', newPayload) + } + }, + async register({commit, state, dispatch}, payload) { + await axios.post('/customer/auth/register', payload).then(response => { + if (response.data) { + + state.registerStepTwo=true; + // Navigate User to homepage + //localStorage.setItem("accessToken", response.data.api_token) + // Set accessToken + // Update user details + // commit('UPDATE_USER_INFO', response.data, {root: true}) + // Set bearer token in axios + //commit("SET_BEARER", response.data.api_token) + //router.push(router.currentRoute.query.to || '/') + } + }) + .catch(error => { + throw error + }) + }, + async registerValidate({commit}, payload) { + /* try {*/ + await axios.post('/customer/auth/registerValidate', payload) + .then(response => { + if (response.data) { + // Navigate User to homepage + localStorage.setItem("accessToken", response.data.api_token) + // Set accessToken + // Update user details + commit('UPDATE_USER_INFO', response.data, {root: true}) + commit("SET_USER_INFO",response.data); + // Set bearer token in axios + commit("SET_BEARER", response.data.api_token) + router.push(router.currentRoute.query.to || '/') + } + }).catch(error=>{ + payload.notify({ + title: 'خطا در بررسی اطلاعات', + text: 'لطفا کد صحیح را وارد کنید.', + iconPack: 'feather', + icon: 'icon-alert-circle', + color: 'danger' + }); + /*console.log("sdfsdfsdfsdff"); + this.$vs.notify({ + title: 'خطا در بررسی اطلاعات', + text: 'لطفا کد صحیح را وارد کنید.', + iconPack: 'feather', + icon: 'icon-alert-circle', + color: 'danger' + })*/ + }); + + + //localStorage.setItem("accessToken", response.data.api_token) + //commit('SET_REGISTER_STEP') + /*} catch (e) { + + }*/ + }, + login({commit, state, dispatch}, payload) { + + // If user is already logged in notify and exit + if (state.isUserLoggedIn()) { + // Close animation if passed as payload + if (payload.closeAnimation) payload.closeAnimation() + + payload.notify({ + title: 'Login Attempt', + text: 'You are already logged in!', + iconPack: 'feather', + icon: 'icon-alert-circle', + color: 'warning' + }) + + return false + } + + // Try to sigin + firebase.auth().signInWithEmailAndPassword(payload.userDetails.email, payload.userDetails.password) + + .then((result) => { + + // Set FLAG username update required for updating username + let isUsernameUpdateRequired = false + + // if username is provided and updateUsername FLAG is true + // set local username update FLAG to true + // try to update username + if (payload.updateUsername && payload.userDetails.username) { + + isUsernameUpdateRequired = true + + dispatch('updateUsername', { + user: result.user, + username: payload.userDetails.username, + notify: payload.notify, + isReloadRequired: true + }) + } + + // Close animation if passed as payload + if (payload.closeAnimation) payload.closeAnimation() + + // if username update is not required + // just reload the page to get fresh data + // set new user data in localstorage + if (!isUsernameUpdateRequired) { + router.push(router.currentRoute.query.to || '/') + commit('UPDATE_USER_INFO', result.user.providerData[0], {root: true}) + } + }, (err) => { + + // Close animation if passed as payload + if (payload.closeAnimation) payload.closeAnimation() + + payload.notify({ + time: 2500, + title: 'Error', + text: err.message, + iconPack: 'feather', + icon: 'icon-alert-circle', + color: 'danger' + }) + }) + }, + + // Google Login + loginWithGoogle({commit, state}, payload) { + if (state.isUserLoggedIn()) { + payload.notify({ + title: 'Login Attempt', + text: 'You are already logged in!', + iconPack: 'feather', + icon: 'icon-alert-circle', + color: 'warning' + }) + return false + } + const provider = new firebase.auth.GoogleAuthProvider() + + firebase.auth().signInWithPopup(provider) + .then((result) => { + router.push(router.currentRoute.query.to || '/') + commit('UPDATE_USER_INFO', result.user.providerData[0], {root: true}) + }).catch((err) => { + payload.notify({ + time: 2500, + title: 'Error', + text: err.message, + iconPack: 'feather', + icon: 'icon-alert-circle', + color: 'danger' + }) + }) + }, + + // Facebook Login + loginWithFacebook({commit, state}, payload) { + if (state.isUserLoggedIn()) { + payload.notify({ + title: 'Login Attempt', + text: 'You are already logged in!', + iconPack: 'feather', + icon: 'icon-alert-circle', + color: 'warning' + }) + return false + } + const provider = new firebase.auth.FacebookAuthProvider() + + firebase.auth().signInWithPopup(provider) + .then((result) => { + router.push(router.currentRoute.query.to || '/') + commit('UPDATE_USER_INFO', result.user.providerData[0], {root: true}) + }).catch((err) => { + payload.notify({ + time: 2500, + title: 'Error', + text: err.message, + iconPack: 'feather', + icon: 'icon-alert-circle', + color: 'danger' + }) + }) + }, + + // Twitter Login + loginWithTwitter({commit, state}, payload) { + if (state.isUserLoggedIn()) { + payload.notify({ + title: 'Login Attempt', + text: 'You are already logged in!', + iconPack: 'feather', + icon: 'icon-alert-circle', + color: 'warning' + }) + return false + } + const provider = new firebase.auth.TwitterAuthProvider() + + firebase.auth().signInWithPopup(provider) + .then((result) => { + router.push(router.currentRoute.query.to || '/') + commit('UPDATE_USER_INFO', result.user.providerData[0], {root: true}) + }).catch((err) => { + payload.notify({ + time: 2500, + title: 'Error', + text: err.message, + iconPack: 'feather', + icon: 'icon-alert-circle', + color: 'danger' + }) + }) + }, + + // Github Login + loginWithGithub({commit, state}, payload) { + if (state.isUserLoggedIn()) { + payload.notify({ + title: 'Login Attempt', + text: 'You are already logged in!', + iconPack: 'feather', + icon: 'icon-alert-circle', + color: 'warning' + }) + return false + } + const provider = new firebase.auth.GithubAuthProvider() + + firebase.auth().signInWithPopup(provider) + .then((result) => { + router.push(router.currentRoute.query.to || '/') + commit('UPDATE_USER_INFO', result.user.providerData[0], {root: true}) + }).catch((err) => { + payload.notify({ + time: 2500, + title: 'Error', + text: err.message, + iconPack: 'feather', + icon: 'icon-alert-circle', + color: 'danger' + }) + }) + }, + registerUser({dispatch}, payload) { + + // create user using firebase + firebase.auth().createUserWithEmailAndPassword(payload.userDetails.email, payload.userDetails.password) + .then(() => { + payload.notify({ + title: 'Account Created', + text: 'You are successfully registered!', + iconPack: 'feather', + icon: 'icon-check', + color: 'success' + }) + + const newPayload = { + userDetails: payload.userDetails, + notify: payload.notify, + updateUsername: true + } + dispatch('login', newPayload) + }, (error) => { + payload.notify({ + title: 'Error', + text: error.message, + iconPack: 'feather', + icon: 'icon-alert-circle', + color: 'danger' + }) + }) + }, + updateUsername({commit}, payload) { + payload.user.updateProfile({ + displayName: payload.username + }).then(() => { + + // If username update is success + // update in localstorage + let newUserData = Object.assign({}, payload.user.providerData[0]) + newUserData.displayName = payload.username + commit('UPDATE_USER_INFO', newUserData, {root: true}) + + // If reload is required to get fresh data after update + // Reload current page + if (payload.isReloadRequired) { + router.push(router.currentRoute.query.to || '/') + } + }).catch((err) => { + payload.notify({ + time: 8800, + title: 'Error', + text: err.message, + iconPack: 'feather', + icon: 'icon-alert-circle', + color: 'danger' + }) + }) + }, + + + // JWT + loginJWT({commit}, payload) { + return new Promise((resolve, reject) => { + // login(email, pwd) { + // return axios.post("/api/auth/login", {email: email, password: pwd}) + // }, + // registerUser(name, email, pwd) { + // return axios.post("/api/auth/register", {displayName: name, email: email, password: pwd}) + // }, + // refreshToken() { + // return axios.post("/api/auth/refresh-token", {accessToken: localStorage.getItem("accessToKen")}) + // } + axios.post('auth/login', { + username: payload.userDetails.email, + password: payload.userDetails.password + }) + .then(response => { + if (response.data) { + // Navigate User to homepage + localStorage.setItem("accessToken", response.data.api_token) + + // Set accessToken + // Update user details + commit('SET_USER_INFO',response.data) + commit('UPDATE_USER_INFO', response.data, {root: true}) + // + // Set bearer token in axios + commit("SET_BEARER", response.data.api_token) + router.push(router.currentRoute.query.to || '/') + //store.dispatch("user/getUserInfo"); + resolve(response) + } else { + reject({message: "Wrong Email or Password"}) + } + }) + .catch(error => { + reject(error) + }) + }) + }, + registerUserJWT({commit}, payload) { + + const {displayName, email, password, confirmPassword} = payload.userDetails + + return new Promise((resolve, reject) => { + + // Check confirm password + if (password !== confirmPassword) { + reject({message: "Password doesn't match. Please try again."}) + } + + jwt.registerUser(displayName, email, password) + .then(response => { + // Redirect User + router.push(router.currentRoute.query.to || '/') + + // Update data in localStorage + localStorage.setItem("accessToken", response.data.accessToken) + commit('UPDATE_USER_INFO', response.data.userData, {root: true}) + + resolve(response) + }) + .catch(error => { + reject(error) + }) + }) + }, + fetchAccessToken() { + return new Promise((resolve) => { + jwt.refreshToken().then(response => { + resolve(response) + }) + }) + } +} diff --git a/src/store/auth/moduleAuthGetters.js b/src/store/auth/moduleAuthGetters.js new file mode 100644 index 0000000..f3a9cc4 --- /dev/null +++ b/src/store/auth/moduleAuthGetters.js @@ -0,0 +1,11 @@ +/*========================================================================================= + File Name: moduleAuthGetters.js + Description: Auth Module Getters + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + + +export default {} diff --git a/src/store/auth/moduleAuthMutations.js b/src/store/auth/moduleAuthMutations.js new file mode 100644 index 0000000..54506c2 --- /dev/null +++ b/src/store/auth/moduleAuthMutations.js @@ -0,0 +1,20 @@ +/*========================================================================================= + File Name: moduleAuthMutations.js + Description: Auth Module Mutations + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + +import axios from "../../http/axios/index.js" + +export default { + SET_BEARER(state, accessToken) { + axios.defaults.headers.common['Authorization'] = 'Bearer ' + accessToken + }, + SET_USER_INFO(state, payload) { + state.userInfo=payload; + console.log( state.userInfo); + } +} diff --git a/src/store/auth/moduleAuthState.js b/src/store/auth/moduleAuthState.js new file mode 100644 index 0000000..4f02ddf --- /dev/null +++ b/src/store/auth/moduleAuthState.js @@ -0,0 +1,26 @@ +/*========================================================================================= + File Name: moduleAuthState.js + Description: Auth Module State + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + + +import auth from "@/auth/authService"; +import firebase from 'firebase/app' +import 'firebase/auth' + +export default { + userInfo: {}, + isUserLoggedIn: () => { + let isAuthenticated = false + // get firebase current user + const firebaseCurrentUser = firebase.auth().currentUser + if (auth.isAuthenticated() || firebaseCurrentUser) isAuthenticated = true + else isAuthenticated = false + return (localStorage.getItem('userInfo') && isAuthenticated) + }, + registerStepTwo: false +} diff --git a/src/store/badadv/badadv.js b/src/store/badadv/badadv.js new file mode 100644 index 0000000..bfac075 --- /dev/null +++ b/src/store/badadv/badadv.js @@ -0,0 +1,32 @@ +import axios from '@/axios' + +const state = { + loading: false +}; + +const actions = { + async line({commit}, payload) { + try { + commit('LOADING', true); + const {data} = await axios.post('admin/badadv/chart/date',payload); + return data; + } catch (e) { + throw e; + } finally { + commit('LOADING', false); + } + } +} + +const mutations = { + LOADING(state, payload) { + state.loading = payload; + } +} + +export default { + namespaced: true, + state, + mutations, + actions +} diff --git a/src/store/blog/blog.js b/src/store/blog/blog.js new file mode 100644 index 0000000..bdb0bab --- /dev/null +++ b/src/store/blog/blog.js @@ -0,0 +1,89 @@ +import axios from '@/axios' + + +const state = { + error: undefined, + loading: false, + blogOneId:undefined, + edit:[] +}; + +const actions = { + + async save({commit}, payload) { + try { + commit('LOADING', true); + await axios.post('admin/post',payload); + } catch (e) { + throw e; + } finally { + commit('LOADING', false); + } + }, + + async get({commit},id) { + try { + commit('LOADING', true); + let res = await axios.get('admin/post/'+id); + console.log(res.data,'res data') + commit('BLOG_ID', res.data); + } catch (e) { + commit('ERROR', e); + throw e; + } finally { + commit('LOADING', false); + } + }, + + async put({commit}, payload) { + try{ + commit('LOADING', true); + await axios.put('admin/post/'+payload.id, {id:payload.id,data:payload.data,op:'update'}) + commit('UPDATE_BLOG', payload); + }catch (e) { + commit('ERROR', e); + } finally { + commit('LOADING', false); + } + }, + + async submitCountWriting({commit}, payload) { + try{ + commit('LOADING', true); + const writing = await axios.post('admin/post/chart/date',payload) + return writing + } + catch (e) { + this.$ntSetError() + } + finally { + commit('LOADING', false); + } + } + + +} + +const mutations = { + LOADING(state, payload) { + state.loading = payload; + }, + BLOG_ID(state,payload){ + state.blogOneId = payload + }, + UPDATE_BLOG(state, payload) { + state.edit = state.edit.map(blog => { + if (blog.id === payload.id) { + return Object.assign({},blog, payload.data) + } + return blog + }) + } +}; + +export default { + namespaced: true, + state, + mutations, + actions +} diff --git a/src/store/calendar/moduleCalendar.js b/src/store/calendar/moduleCalendar.js new file mode 100644 index 0000000..2612f31 --- /dev/null +++ b/src/store/calendar/moduleCalendar.js @@ -0,0 +1,22 @@ +/*========================================================================================= + File Name: moduleCalendar.js + Description: Calendar Module + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + + +import state from './moduleCalendarState.js' +import mutations from './moduleCalendarMutations.js' +import actions from './moduleCalendarActions.js' +import getters from './moduleCalendarGetters.js' + +export default { + namespaced: true, + state, + mutations, + actions, + getters +} diff --git a/src/store/calendar/moduleCalendarActions.js b/src/store/calendar/moduleCalendarActions.js new file mode 100644 index 0000000..160cf12 --- /dev/null +++ b/src/store/calendar/moduleCalendarActions.js @@ -0,0 +1,85 @@ +/*========================================================================================= + File Name: moduleCalendarActions.js + Description: Calendar Module Actions + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + +import axios from '@/axios.js' + +export default { + addEvent ({ commit }, event) { + return new Promise((resolve, reject) => { + axios.post('/api/apps/calendar/events/', {event}) + .then((response) => { + commit('ADD_EVENT', Object.assign(event, {id: response.data.id})) + resolve(response) + }) + .catch((error) => { reject(error) }) + }) + }, + fetchEvents ({ commit }) { + return new Promise((resolve, reject) => { + axios.get('/api/apps/calendar/events') + .then((response) => { + commit('SET_EVENTS', response.data) + resolve(response) + }) + .catch((error) => { reject(error) }) + }) + }, + fetchEventLabels ({ commit }) { + return new Promise((resolve, reject) => { + axios.get('/api/apps/calendar/labels') + .then((response) => { + commit('SET_LABELS', response.data) + resolve(response) + }) + .catch((error) => { reject(error) }) + }) + }, + editEvent ({ commit }, event) { + return new Promise((resolve, reject) => { + axios.post(`/api/apps/calendar/event/${event.id}`, {event}) + .then((response) => { + + // Convert Date String to Date Object + const event = response.data + event.startDate = new Date(event.startDate) + event.endDate = new Date(event.endDate) + + commit('UPDATE_EVENT', event) + resolve(response) + }) + .catch((error) => { reject(error) }) + }) + }, + removeEvent ({ commit }, eventId) { + return new Promise((resolve, reject) => { + axios.delete(`/api/apps/calendar/event/${eventId}`) + .then((response) => { + commit('REMOVE_EVENT', response.data) + resolve(response) + }) + .catch((error) => { reject(error) }) + }) + }, + eventDragged ({ commit }, payload) { + return new Promise((resolve, reject) => { + axios.post(`/api/apps/calendar/event/dragged/${payload.event.id}`, {payload}) + .then((response) => { + + // Convert Date String to Date Object + const event = response.data + event.startDate = new Date(event.startDate) + event.endDate = new Date(event.endDate) + + commit('UPDATE_EVENT', event) + resolve(response) + }) + .catch((error) => { reject(error) }) + }) + } +} diff --git a/src/store/calendar/moduleCalendarGetters.js b/src/store/calendar/moduleCalendarGetters.js new file mode 100644 index 0000000..a7a8a9d --- /dev/null +++ b/src/store/calendar/moduleCalendarGetters.js @@ -0,0 +1,13 @@ +/*========================================================================================= + File Name: moduleCalendarGetters.js + Description: Calendar Module Getters + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + + +export default { + getEvent: state => (eventId) => state.events.find((event) => event.id === eventId) +} diff --git a/src/store/calendar/moduleCalendarMutations.js b/src/store/calendar/moduleCalendarMutations.js new file mode 100644 index 0000000..e8d6430 --- /dev/null +++ b/src/store/calendar/moduleCalendarMutations.js @@ -0,0 +1,29 @@ +/*========================================================================================= + File Name: moduleCalendarMutations.js + Description: Calendar Module Mutations + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + + +export default { + ADD_EVENT (state, event) { + state.events.push(event) + }, + SET_EVENTS (state, events) { + state.events = events + }, + SET_LABELS (state, labels) { + state.eventLabels = labels + }, + UPDATE_EVENT (state, event) { + const eventIndex = state.events.findIndex((e) => e.id === event.id) + Object.assign(state.events[eventIndex], event) + }, + REMOVE_EVENT (state, eventId) { + const eventIndex = state.events.findIndex((e) => e.id === eventId) + state.events.splice(eventIndex, 1) + } +} diff --git a/src/store/calendar/moduleCalendarState.js b/src/store/calendar/moduleCalendarState.js new file mode 100644 index 0000000..e34037f --- /dev/null +++ b/src/store/calendar/moduleCalendarState.js @@ -0,0 +1,17 @@ +/*========================================================================================= + File Name: moduleCalendarState.js + Description: Calendar Module State + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + +export default { + + // Calendar Labels + eventLabels: [], + + // Simple Calendar State + events: [] +} diff --git a/src/store/category/index.js b/src/store/category/index.js new file mode 100644 index 0000000..26eb2f4 --- /dev/null +++ b/src/store/category/index.js @@ -0,0 +1,86 @@ +import _ from 'lodash'; +import axios from "@/axios"; + +const state = { + model: {}, + rows: [], + count: 0, + page: 1, + loading: false, + searchQuery: undefined, +}; +const mutations = { + ADD_ITEM(state, data) { + state.rows.push(data); + }, + LOADING(state, data) { + state.loading = data; + }, + SEARCH_QUERY_SET(state, data) { + state.searchQuery = data; + }, + FETCH(state, {rows , count, page}){ + state.rows = rows; + state.count = count || 0; + state.page = page || 1; + }, + INJECT_LIST(state, {count, rows, page}) { + state.count = count; + state.page = page; + state.rows = rows; + } +}; + + +const actions = { + async remove({commit, dispatch}, {id}) { + commit('LOADING', true); + try { + const {data} = await axios.delete('category/' + id); + dispatch('category/fetch'); + } catch (e) { + + throw e; + } finally { + commit('LOADING', false); + } + }, + async save({commit, state}, payload) { + commit('LOADING', true); + try { + if (payload.id) { + const {data} = await axios.put(`category/${payload.id}`, payload); + return data; + } else { + const {data} = await axios.post(`category/`, payload); + return data; + } + } catch (e) { + throw e; + } finally { + commit('LOADING', false); + } + }, + async fetch({commit, state}, data) { + commit('LOADING', true); + try { + const {data} = await axios.get('category/', {params:{page:state.page, text_search:state.searchQuery}}); + commit('FETCH' , data); + + } catch (e) { + throw e; + } finally { + commit('LOADING', false); + } + } +}; +const getters = {}; + + +export default { + namespaced: true, + state, + mutations, + actions, + getters +} diff --git a/src/store/chat/moduleChat.js b/src/store/chat/moduleChat.js new file mode 100644 index 0000000..db1b739 --- /dev/null +++ b/src/store/chat/moduleChat.js @@ -0,0 +1,22 @@ +/*========================================================================================= + File Name: moduleChat.js + Description: Chat Module + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + + +import state from './moduleChatState.js' +import mutations from './moduleChatMutations.js' +import actions from './moduleChatActions.js' +import getters from './moduleChatGetters.js' + +export default { + namespaced: true, + state, + mutations, + actions, + getters +} diff --git a/src/store/chat/moduleChatActions.js b/src/store/chat/moduleChatActions.js new file mode 100644 index 0000000..57eb4ed --- /dev/null +++ b/src/store/chat/moduleChatActions.js @@ -0,0 +1,105 @@ +/*========================================================================================= + File Name: moduleChatActions.js + Description: Chat Module Actions + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + +import axios from '@/axios.js' + +export default { + setChatSearchQuery ({ commit }, query) { + commit('SET_CHAT_SEARCH_QUERY', query) + }, + updateAboutChat ({ commit, rootState }, value) { + commit('UPDATE_ABOUT_CHAT', { + rootState, + value + }) + }, + updateStatusChat ({ commit, rootState }, value) { + commit('UPDATE_STATUS_CHAT', { + rootState, + value + }) + }, + + // API CALLS + sendChatMessage ({ getters, commit, dispatch }, payload) { + return new Promise((resolve, reject) => { + axios.post('/api/apps/chat/msg', {payload}) + .then((response) => { + payload.chatData = getters.chatDataOfUser(payload.id) + if (!payload.chatData) { dispatch('fetchChatContacts') } + commit('SEND_CHAT_MESSAGE', payload) + resolve(response) + }) + .catch((error) => { reject(error) }) + }) + }, + + // Get contacts from server. Also change in store + fetchContacts ({ commit }) { + return new Promise((resolve, reject) => { + axios.get('/api/apps/chat/contacts', {params: {q: ''}}) + .then((response) => { + commit('UPDATE_CONTACTS', response.data) + resolve(response) + }) + .catch((error) => { reject(error) }) + }) + }, + + // Get chat-contacts from server. Also change in store + fetchChatContacts ({ commit }) { + return new Promise((resolve, reject) => { + axios.get('/api/apps/chat/chat-contacts', {params: {q: ''}}) + .then((response) => { + commit('UPDATE_CHAT_CONTACTS', response.data) + resolve(response) + }) + .catch((error) => { reject(error) }) + }) + }, + + // Get chats from server. Also change in store + fetchChats ({ commit }) { + return new Promise((resolve, reject) => { + axios.get('/api/apps/chat/chats') + .then((response) => { + commit('UPDATE_CHATS', response.data) + resolve(response) + }) + .catch((error) => { reject(error) }) + }) + }, + + markSeenAllMessages ({ getters, commit }, id) { + + return new Promise((resolve, reject) => { + axios.post('/api/apps/chat/mark-all-seen', {id}) + .then((response) => { + commit('MARK_SEEN_ALL_MESSAGES', { + id, + chatData: getters.chatDataOfUser(id) + }) + resolve(response) + }) + .catch((error) => { reject(error) }) + }) + }, + + toggleIsPinned ({ commit }, payload) { + return new Promise((resolve, reject) => { + axios.post('/api/apps/chat/set-pinned/', {contactId: payload.id, + value: payload.value}) + .then((response) => { + commit('TOGGLE_IS_PINNED', payload) + resolve(response) + }) + .catch((error) => { reject(error) }) + }) + } +} diff --git a/src/store/chat/moduleChatGetters.js b/src/store/chat/moduleChatGetters.js new file mode 100644 index 0000000..23bc85e --- /dev/null +++ b/src/store/chat/moduleChatGetters.js @@ -0,0 +1,52 @@ +/*========================================================================================= + File Name: moduleChatGetters.js + Description: Chat Module Getters + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + + +// import contacts from '@/views/apps/chat/contacts' + +export default { + chatDataOfUser: state => id => { + return state.chats[Object.keys(state.chats).find(key => Number(key) === id)] + }, + chatContacts: (state, getters) => { + const chatContacts = state.chatContacts.filter((contact) => contact.displayName.toLowerCase().includes(state.chatSearchQuery.toLowerCase())) + + chatContacts.sort((x, y) => { + const timeX = getters.chatLastMessaged(x.uid).time + const timeY = getters.chatLastMessaged(y.uid).time + return new Date(timeY) - new Date(timeX) + }) + + return chatContacts.sort((x, y) => { + const chatDataX = getters.chatDataOfUser(x.uid) + const chatDataY = getters.chatDataOfUser(y.uid) + if (chatDataX && chatDataY) return chatDataY.isPinned - chatDataX.isPinned + else return 0 + }) + }, + contacts: (state) => state.contacts.filter((contact) => contact.displayName.toLowerCase().includes(state.chatSearchQuery.toLowerCase())), + contact: (state) => contactId => state.contacts.find((contact) => contact.uid === contactId), + chats: (state) => state.chats, + chatUser: (state, getters, rootState) => id => state.contacts.find((contact) => contact.uid === id) || rootState.AppActiveUser, + + chatLastMessaged: (state, getters) => id => { + if (getters.chatDataOfUser(id)) return getters.chatDataOfUser(id).msg.slice(-1)[0] + else return false + }, + chatUnseenMessages: (state, getters) => id => { + let unseenMsg = 0 + const chatData = getters.chatDataOfUser(id) + if (chatData) { + chatData.msg.map((msg) => { + if (!msg.isSeen && !msg.isSent) unseenMsg++ + }) + } + return unseenMsg + } +} diff --git a/src/store/chat/moduleChatMutations.js b/src/store/chat/moduleChatMutations.js new file mode 100644 index 0000000..5772fb8 --- /dev/null +++ b/src/store/chat/moduleChatMutations.js @@ -0,0 +1,54 @@ +/*========================================================================================= + File Name: moduleChatMutations.js + Description: Chat Module Mutations + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + + +import Vue from 'vue' + +export default { + UPDATE_ABOUT_CHAT (state, obj) { + obj.rootState.AppActiveUser.about = obj.value + }, + UPDATE_STATUS_CHAT (state, obj) { + obj.rootState.AppActiveUser.status = obj.value + }, + + // API AFTER + SEND_CHAT_MESSAGE (state, payload) { + if (payload.chatData) { + // If there's already chat. Push msg to existing chat + state.chats[Object.keys(state.chats).find(key => Number(key) === payload.id)].msg.push(payload.msg) + } else { + // Create New chat and add msg + const chatId = payload.id + Vue.set(state.chats, [chatId], { isPinned: payload.isPinned, + msg: [payload.msg] }) + } + }, + UPDATE_CONTACTS (state, contacts) { + state.contacts = contacts + }, + UPDATE_CHAT_CONTACTS (state, chatContacts) { + state.chatContacts = chatContacts + }, + UPDATE_CHATS (state, chats) { + state.chats = chats + }, + SET_CHAT_SEARCH_QUERY (state, query) { + state.chatSearchQuery = query + }, + MARK_SEEN_ALL_MESSAGES (state, payload) { + payload.chatData.msg.forEach((msg) => { + msg.isSeen = true + }) + }, + TOGGLE_IS_PINNED (state, payload) { + state.chats[Object.keys(state.chats).find(key => Number(key) === payload.id)].isPinned = payload.value + } +} + diff --git a/src/store/chat/moduleChatState.js b/src/store/chat/moduleChatState.js new file mode 100644 index 0000000..55681b9 --- /dev/null +++ b/src/store/chat/moduleChatState.js @@ -0,0 +1,24 @@ +/*========================================================================================= + File Name: moduleChatState.js + Description: Chat Module State + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + + +export default { + + // Chat Search Query + chatSearchQuery: '', + + // Stores All Contacts + contacts: [], + + // Stores Chat Contacts + chatContacts: [], + + // Stores Chat data(log) + chats: {} +} diff --git a/src/store/collection/collection.js b/src/store/collection/collection.js new file mode 100644 index 0000000..6c85a44 --- /dev/null +++ b/src/store/collection/collection.js @@ -0,0 +1,92 @@ +import axios from '@/axios'; +import {notification} from "ant-design-vue"; + +const state = { + collectionSingle: undefined, + error: undefined, + loading: false, + users: [], + successData: undefined, + collection: [], + groups: [] +}; +const actions = { + + async submitCollection({commit}, payload) { + try { + commit('LOADING', true); + if (payload.id) { + await axios({ + method: 'put', + url: 'admin/collection/' + payload.id, + data: {id: payload.id, data: payload.data} + }); + } else { + await axios({ + method: 'post', + url: 'admin/collection', + data: {data: payload} + }); + } + } catch (e) { + console.log(e); + throw e; + } finally { + commit('LOADING', false); + } + + }, + async collectionId({commit}, id) { + try { + commit('LOADING', true); + let res = await axios.get('admin/collection/' + id); + commit('COLLECTION_ID', res.data); + } catch (e) { + commit('ERROR', e); + throw e; + } finally { + commit('LOADING', false); + } + }, + + +}; +const mutations = { + LOADING(state, payload) { + state.loading = payload; + }, + SET_ROW_ATTR(state, payload) { + if (!payload.id) { + state.collectionSingle.groups.push(payload); + } else { + const ind = state.collectionSingle.groups.indexOf(state.collectionSingle.groups.find((item) => item.id == payload.id)); + if (ind > -1) { + state.collectionSingle.groups[ind] = Object.assign({}, payload) + } + } + }, + DELETE_ROW(state, payload) { + state.collectionSingle.groups.splice(payload,1) + }, + COLLECTION_ID(state, payload) { + state.collectionSingle = payload; + }, + SUCCESS_DATA(state, payload) { + state.successData = payload; + }, + UPDATE_COLLECTION(state, payload) { + state.collection = state.collection.map(collection => { + if (collection.id === payload.id) { + return Object.assign({}, collection, payload.data); + } + return collection; + }); + } +}; + +export default { + namespaced: true, + state, + mutations, + actions +}; diff --git a/src/store/customer/customer.js b/src/store/customer/customer.js new file mode 100644 index 0000000..962ef34 --- /dev/null +++ b/src/store/customer/customer.js @@ -0,0 +1,188 @@ +import axios from "@/axios"; +import {notification} from "ant-design-vue"; + +const state = { + getDataCustomer: [], + loading: false, + customerById:[], + successData:undefined, + loadingUnActiveAccount:false +}; + +const actions = { + async CustomerId({commit},id) { + try { + commit('LOADING', true); + let res = await axios.get('admin/customer/'+id); + console.log(res.data,'res-collection') + commit('CUSTOMER_ID', res.data); + } catch (e) { + commit('ERROR', e); + throw e; + } finally { + commit('LOADING', false); + } + }, + async editCustomer({commit}, payload) { + + try{ + commit('LOADING', true); + await axios({ + method: 'put', + url: 'admin/customer/'+payload.id, + data: {id:payload.id,data:payload.data,op:'update'} + }).then((res)=>{ + console.log(res,res.data,'--->res data') + commit('SUCCESS_DATA',res.data) + commit('EDIT_CUSTOMER', payload); + notification.success({ + message: "پیغام موفقیت آمیز", + description: "اطلاعات شما با موفقیت ویرایش شد.", + duration: 1, + }) + }) + } + catch (e) { + commit('ERROR', e); + } + finally { + commit('LOADING', false); + } + }, + async Authentication({commit}, payload) { + try{ + commit('LOADING', true); + await axios.put('admin/customer/'+payload.id,{data:payload,op:'sts'}) + } + catch (e) { + commit('ERROR', e); + } + finally { + commit('LOADING', false); + } + }, + async reject({commit}, payload) { + try{ + await axios.put('admin/customer/'+payload.id,{data:payload,op:'sts'}) + } + catch (e) { + commit('ERROR', e); + } + finally { + } + }, + async saveActiveAccount({commit}, payload) { + try{ + commit('LOADING', true); + await axios.put('admin/customer/'+payload.id,{data:payload,op:'active'}) + } + catch (e) { + commit('ERROR', e); + } + finally { + commit('LOADING', false); + } + }, + async SendCity({commit}, payload) { + try{ + commit('LOADING', true); + const city = await axios.post('admin/customer/query/city',payload) + return city + } + catch (e) { + this.$ntSetError() + } + finally { + commit('LOADING', false); + } + }, + async SendCustomerSingUp({commit}, payload) { + try{ + commit('LOADING', true); + const signUp = await axios.post('admin/customer/query/date',payload) + return signUp + } + catch (e) { + this.$ntSetError() + } + finally { + commit('LOADING', false); + } + }, + async SendCustomerGrowth({commit}, payload) { + try{ + commit('LOADING', true); + const growth = await axios.post('admin/customer/chart/growth',payload) + return growth + } + catch (e) { + this.$ntSetError() + } + finally { + commit('LOADING', false); + } + }, + async deleteCustomer({commit},id) { + try { + commit('LOADING_DELETE', true); + const {data} = await axios.delete('admin/customer/'+id ); + return data; + } catch (e) { + throw e; + } finally { + commit('LOADING_DELETE', false); + } + }, + async unActiveAccountCustomer({commit},payload) { + try { + commit('LOADING_UN_ACTIVE_ACCOUNT_CUSTOMER', true); + await axios.put('admin/customer/'+payload.id , {data:payload,op:"active"}); + } catch (e) { + throw e; + } finally { + commit('LOADING_UN_ACTIVE_ACCOUNT_CUSTOMER', false); + } + }, + async sendMessage({commit},payload) { + try { + await axios.post('admin/customer/message',payload); + } catch (e) { + throw e; + } finally { + + } + }, + +}; + +const mutations = { + CUSTOMER_ID(state, payload) { + state.getDataCustomer = payload; + }, + SUCCESS_DATA(state, payload) { + state.successData = payload; + }, + LOADING(state, payload) { + state.loading = payload; + }, + LOADING_UN_ACTIVE_ACCOUNT_CUSTOMER(state, payload) { + state.loadingUnActiveAccount = payload; + }, + EDIT_CUSTOMER(state, payload) { + state.customerById = state.customerById.map(customer => { + if (customer.id === payload.id) { + return Object.assign({},customer, payload.data) + } + return customer + }) + }, +}; + + + +export default { + namespaced: true, + state, + mutations, + actions, +} diff --git a/src/store/customer/index.js b/src/store/customer/index.js new file mode 100644 index 0000000..534297e --- /dev/null +++ b/src/store/customer/index.js @@ -0,0 +1,101 @@ +import axios from "@/axios"; + +const state = { + model: {}, + rows: [], + count: 0, + page: 1, + loading: false, + searchQuery: undefined, +}; +const mutations = { + ADD_ITEM(state, data) { + state.rows.push(data); + }, + LOADING(state, data) { + state.loading = data; + }, + SET_PAGE(state, data) { + state.page = data; + }, + FETCH_EDIT(state, data) { + state.model = data; + }, + SEARCH_QUERY_SET(state, data) { + state.searchQuery = data; + }, + FETCH(state, {rows, count, page}) { + state.rows = rows; + state.count = count || 0; + state.page = (page || 0)+1; + }, + INJECT_LIST(state, {count, rows, page}) { + state.count = count; + state.page = page; + state.rows = rows; + } +}; + + +const actions = { + async remove({commit, dispatch}, {id}) { + commit('LOADING', true); + try { + const {data} = await axios.delete('user/profile/' + id); + dispatch('fetch'); + } catch (e) { + throw e; + } finally { + commit('LOADING', false); + } + }, + async save({commit, state}, payload) { + commit('LOADING', true); + try { + if (payload.id) { + const {data} = await axios.put(`user/profile/${payload.id}`, payload); + return data; + } else { + const {data} = await axios.post(`user/profile/`, payload); + return data; + } + } catch (e) { + throw e; + } finally { + commit('LOADING', false); + } + }, + async fetch({commit, state}, data) { + commit('LOADING', true); + try { + const {data} = await axios.get('user/profile', {params: {page: state.page, text_search: state.searchQuery}}); + commit('FETCH', data); + + } catch (e) { + throw e; + } finally { + commit('LOADING', false); + } + }, + async getEditData({commit, state}, {id}) { + commit('LOADING', true); + try { + const {data} = await axios.get(`user/profile/${id}`); + commit('FETCH_EDIT', data); + } catch (e) { + throw e; + } finally { + commit('LOADING', false); + } + } +}; +const getters = {}; + + +export default { + namespaced: true, + state, + mutations, + actions, + getters +} diff --git a/src/store/data-list/moduleDataList.js b/src/store/data-list/moduleDataList.js new file mode 100644 index 0000000..0980138 --- /dev/null +++ b/src/store/data-list/moduleDataList.js @@ -0,0 +1,24 @@ +/*========================================================================================= + File Name: moduleDataList.js + Description: Calendar Module + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + + +import state from './moduleDataListState.js' +import mutations from './moduleDataListMutations.js' +import actions from './moduleDataListActions.js' +import getters from './moduleDataListGetters.js' + +export default { + isRegistered: false, + namespaced: true, + state, + mutations, + actions, + getters +} + diff --git a/src/store/data-list/moduleDataListActions.js b/src/store/data-list/moduleDataListActions.js new file mode 100644 index 0000000..e063bca --- /dev/null +++ b/src/store/data-list/moduleDataListActions.js @@ -0,0 +1,79 @@ +/*========================================================================================= + File Name: moduleCalendarActions.js + Description: Calendar Module Actions + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + +import axios from '@/axios.js' + +export default { + addItem ({ commit }, item) { + return new Promise((resolve, reject) => { + axios.post('/api/data-list/products/', {item}) + .then((response) => { + commit('ADD_ITEM', Object.assign(item, {id: response.data.id})) + resolve(response) + }) + .catch((error) => { reject(error) }) + }) + }, + fetchDataListItems ({ commit }) { + return new Promise((resolve, reject) => { + axios.get('/api/data-list/products') + .then((response) => { + commit('SET_PRODUCTS', response.data) + resolve(response) + }) + .catch((error) => { reject(error) }) + }) + }, + // fetchEventLabels({ commit }) { + // return new Promise((resolve, reject) => { + // axios.get("/api/apps/calendar/labels") + // .then((response) => { + // commit('SET_LABELS', response.data) + // resolve(response) + // }) + // .catch((error) => { reject(error) }) + // }) + // }, + updateItem ({ commit }, item) { + return new Promise((resolve, reject) => { + axios.post(`/api/data-list/products/${item.id}`, {item}) + .then((response) => { + commit('UPDATE_PRODUCT', response.data) + resolve(response) + }) + .catch((error) => { reject(error) }) + }) + }, + removeItem ({ commit }, itemId) { + return new Promise((resolve, reject) => { + axios.delete(`/api/data-list/products/${itemId}`) + .then((response) => { + commit('REMOVE_ITEM', itemId) + resolve(response) + }) + .catch((error) => { reject(error) }) + }) + } + // eventDragged({ commit }, payload) { + // return new Promise((resolve, reject) => { + // axios.post(`/api/apps/calendar/event/dragged/${payload.event.id}`, {payload: payload}) + // .then((response) => { + + // // Convert Date String to Date Object + // let event = response.data + // event.startDate = new Date(event.startDate) + // event.endDate = new Date(event.endDate) + + // commit('UPDATE_EVENT', event) + // resolve(response) + // }) + // .catch((error) => { reject(error) }) + // }) + // }, +} diff --git a/src/store/data-list/moduleDataListGetters.js b/src/store/data-list/moduleDataListGetters.js new file mode 100644 index 0000000..0d49568 --- /dev/null +++ b/src/store/data-list/moduleDataListGetters.js @@ -0,0 +1,13 @@ +/*========================================================================================= + File Name: moduleCalendarGetters.js + Description: Calendar Module Getters + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + + +export default { + // getItem: state => (productId) => state.products.find((product) => product.id == productId), +} diff --git a/src/store/data-list/moduleDataListMutations.js b/src/store/data-list/moduleDataListMutations.js new file mode 100644 index 0000000..b3dc605 --- /dev/null +++ b/src/store/data-list/moduleDataListMutations.js @@ -0,0 +1,29 @@ +/*========================================================================================= + File Name: moduleCalendarMutations.js + Description: Calendar Module Mutations + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + + +export default { + ADD_ITEM (state, item) { + state.products.unshift(item) + }, + SET_PRODUCTS (state, products) { + state.products = products + }, + // SET_LABELS(state, labels) { + // state.eventLabels = labels + // }, + UPDATE_PRODUCT (state, product) { + const productIndex = state.products.findIndex((p) => p.id === product.id) + Object.assign(state.products[productIndex], product) + }, + REMOVE_ITEM (state, itemId) { + const ItemIndex = state.products.findIndex((p) => p.id === itemId) + state.products.splice(ItemIndex, 1) + } +} diff --git a/src/store/data-list/moduleDataListState.js b/src/store/data-list/moduleDataListState.js new file mode 100644 index 0000000..7f1a145 --- /dev/null +++ b/src/store/data-list/moduleDataListState.js @@ -0,0 +1,12 @@ +/*========================================================================================= + File Name: moduleCalendarState.js + Description: Calendar Module State + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + +export default { + products: [] +} diff --git a/src/store/eCommerce/moduleECommerce.js b/src/store/eCommerce/moduleECommerce.js new file mode 100644 index 0000000..1357c4b --- /dev/null +++ b/src/store/eCommerce/moduleECommerce.js @@ -0,0 +1,22 @@ +/*========================================================================================= + File Name: moduleecommerce.js + Description: ecommerce Module + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + + +import state from './moduleECommerceState.js' +import mutations from './moduleECommerceMutations.js' +import actions from './moduleECommerceActions.js' +import getters from './moduleECommerceGetters.js' + +export default { + namespaced: true, + state, + mutations, + actions, + getters +} diff --git a/src/store/eCommerce/moduleECommerceActions.js b/src/store/eCommerce/moduleECommerceActions.js new file mode 100644 index 0000000..a2b266b --- /dev/null +++ b/src/store/eCommerce/moduleECommerceActions.js @@ -0,0 +1,31 @@ +/*========================================================================================= + File Name: moduleEcommerceActions.js + Description: Ecommerce Module Actions + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + +export default { + toggleItemInWishList ({ commit }, item) { + commit('TOGGLE_ITEM_IN_WISH_LIST', item) + }, + toggleItemInCart ({ getters, commit, dispatch }, item) { + getters.isInCart(item.objectID) ? commit('REMOVE_ITEM_FROM_CART', item) : dispatch('additemInCart', item) + }, + additemInCart ({ commit }, item) { + + // Below properties should be added as per requirement from back-end + // This is added just for demo purpose + item['quantity'] = 1 + item['discount_in_percentage'] = Math.floor(Math.random() * 20) + 4 + item['offers_count'] = Math.floor(Math.random() * 4) + 1 + item['delivery_date'] = new Date(new Date().getTime() + (Math.random() * 10 * 24 * 60 * 60 * 1000)).toDateString().slice(0, -4) + + commit('ADD_ITEM_IN_CART', item) + }, + updateItemQuantity ({ commit }, payload) { + commit('UPDATE_ITEM_QUANTITY', payload) + } +} diff --git a/src/store/eCommerce/moduleECommerceGetters.js b/src/store/eCommerce/moduleECommerceGetters.js new file mode 100644 index 0000000..82ced21 --- /dev/null +++ b/src/store/eCommerce/moduleECommerceGetters.js @@ -0,0 +1,22 @@ +/*========================================================================================= + File Name: moduleEcommerceGetters.js + Description: Ecommerce Module Getters + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + + +export default { + isInCart: state => itemId => { + return state.cartItems.some((item) => item.objectID === itemId) + }, + isInWishList: state => itemId => { + return state.wishList.some((item) => item.objectID === itemId) + }, + getCartItem: state => itemId => { + const result = state.cartItems.filter((item) => item.objectID === itemId) + return result.length ? result.pop() : [] + } +} diff --git a/src/store/eCommerce/moduleECommerceMutations.js b/src/store/eCommerce/moduleECommerceMutations.js new file mode 100644 index 0000000..6c167c6 --- /dev/null +++ b/src/store/eCommerce/moduleECommerceMutations.js @@ -0,0 +1,30 @@ +/*========================================================================================= + File Name: moduleEcommerceMutations.js + Description: Ecommerce Module Mutations + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + +export default { + TOGGLE_ITEM_IN_WISH_LIST (state, item) { + const index = state.wishList.findIndex(i => i.objectID === item.objectID) + if (index < 0) { + state.wishList.push(item) + } else { + state.wishList.splice(index, 1) + } + }, + REMOVE_ITEM_FROM_CART (state, item) { + const index = state.cartItems.findIndex(i => i.objectID === item.objectID) + if (index > -1) { state.cartItems.splice(index, 1) } + }, + ADD_ITEM_IN_CART (state, item) { + state.cartItems.push(Object.assign({}, item)) + }, + UPDATE_ITEM_QUANTITY (state, payload) { + state.cartItems[payload.index].quantity = payload.quantity + } +} + diff --git a/src/store/eCommerce/moduleECommerceState.js b/src/store/eCommerce/moduleECommerceState.js new file mode 100644 index 0000000..97250af --- /dev/null +++ b/src/store/eCommerce/moduleECommerceState.js @@ -0,0 +1,34 @@ +/*========================================================================================= + File Name: moduleEcommerceState.js + Description: Ecommerce Module State + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + +/* eslint-disable */ +export default { + cartItems: [ + { "name": "Nikon - D810 DSLR Camera with AF-S NIKKOR 24-120mm f/4G ED VR Zoom Lens - Black", "description": "Shoot arresting photos and 1080p high-definition videos with this Nikon D810 DSLR camera, which features a 36.3-megapixel CMOS sensor and a powerful EXPEED 4 processor for clear, detailed images. The AF-S NIKKOR 24-120mm lens offers shooting versatility. Memory card sold separately.", "brand": "Nikon", "categories": ["Cameras & Camcorders", "Digital Cameras", "Digital SLR Cameras", "DSLR Body & Lens"], "hierarchicalCategories": { "lvl0": "Cameras & Camcorders", "lvl1": "Cameras & Camcorders > Digital Cameras", "lvl2": "Cameras & Camcorders > Digital Cameras > Digital SLR Cameras", "lvl3": "Cameras & Camcorders > Digital Cameras > Digital SLR Cameras > DSLR Body & Lens" }, "type": "Dslr cameras", "price": 4099.99, "price_range": "> 2000", "image": "https://cdn-demo.algolia.com/bestbuy-0118/3953409_sb.jpg", "url": "https://api.bestbuy.com/click/-/3953409/pdp", "free_shipping": true, "rating": 4, "popularity": 12311, "objectID": "3953409", "_highlightResult": { "name": { "value": "Nikon - D810 DSLR Camera with AF-S NIKKOR 24-120mm f/4G ED VR Zoom Lens - Black", "matchLevel": "none", "matchedWords": [] }, "description": { "value": "Shoot arresting photos and 1080p high-definition videos with this Nikon D810 DSLR camera, which features a 36.3-megapixel CMOS sensor and a powerful EXPEED 4 processor for clear, detailed images. The AF-S NIKKOR 24-120mm lens offers shooting versatility. Memory card sold separately.", "matchLevel": "none", "matchedWords": [] }, "brand": { "value": "Nikon", "matchLevel": "none", "matchedWords": [] }, "categories": [{ "value": "Cameras & Camcorders", "matchLevel": "none", "matchedWords": [] }, { "value": "Digital Cameras", "matchLevel": "none", "matchedWords": [] }, { "value": "Digital SLR Cameras", "matchLevel": "none", "matchedWords": [] }, { "value": "DSLR Body & Lens", "matchLevel": "none", "matchedWords": [] }] }, "quantity": 1, "discount_in_percentage": 13, "offers_count": 4, "delivery_date": "Wed Apr 10" }, + { "name": "Sony - 75\" Class (74.5\" diag) - LED - 2160p - Smart - 3D - 4K Ultra HD TV with High Dynamic Range - Black", "description": "This Sony 4K HDR TV boasts 4K technology for vibrant hues. Its X940D series features a bold 75-inch screen and slim design. Wires remain hidden, and the unit is easily wall mounted. This television has a 4K Processor X1 and 4K X-Reality PRO for crisp video. This Sony 4K HDR TV is easy to control via voice commands.", "brand": "Sony", "categories": ["TV & Home Theater", "TVs", "4K Ultra HD TVs"], "hierarchicalCategories": { "lvl0": "TV & Home Theater", "lvl1": "TV & Home Theater > TVs", "lvl2": "TV & Home Theater > TVs > 4K Ultra HD TVs" }, "type": "Mht 61\"-100\" tv's", "price": 4499.99, "price_range": "> 2000", "image": "https://cdn-demo.algolia.com/bestbuy-0118/4803900_sb.jpg", "url": "https://api.bestbuy.com/click/-/4803900/pdp", "free_shipping": false, "rating": 4, "popularity": 20687, "objectID": "4803900", "_highlightResult": { "name": { "value": "Sony - 75" Class (74.5" diag) - LED - 2160p - Smart - 3D - 4K Ultra HD TV with High Dynamic Range - Black", "matchLevel": "none", "matchedWords": [] }, "description": { "value": "This Sony 4K HDR TV boasts 4K technology for vibrant hues. Its X940D series features a bold 75-inch screen and slim design. Wires remain hidden, and the unit is easily wall mounted. This television has a 4K Processor X1 and 4K X-Reality PRO for crisp video. This Sony 4K HDR TV is easy to control via voice commands.", "matchLevel": "none", "matchedWords": [] }, "brand": { "value": "Sony", "matchLevel": "none", "matchedWords": [] }, "categories": [{ "value": "TV & Home Theater", "matchLevel": "none", "matchedWords": [] }, { "value": "TVs", "matchLevel": "none", "matchedWords": [] }, { "value": "4K Ultra HD TVs", "matchLevel": "none", "matchedWords": [] }] }, "quantity": 1, "discount_in_percentage": 5, "offers_count": 2, "delivery_date": "Wed Apr 13" }, + { "name": "Beats by Dr. Dre - Geek Squad Certified Refurbished Beats Studio Wireless On-Ear Headphones - Red", "description": "Rock out to your favorite songs with these Beats by Dr. Dre Beats Studio Wireless GS-MH8K2AM/A headphones that feature a Beats Acoustic Engine and DSP software for enhanced clarity. ANC (Adaptive Noise Cancellation) allows you to focus on your tunes.", "brand": "Beats by Dr. Dre", "categories": ["Audio", "Headphones", "All Headphones"], "hierarchicalCategories": { "lvl0": "Audio", "lvl1": "Audio > Headphones", "lvl2": "Audio > Headphones > All Headphones" }, "type": "Refurbished beats", "price": 379.99, "price_range": "200 - 500", "image": "https://cdn-demo.algolia.com/bestbuy-0118/4784058_sb.jpg", "url": "https://api.bestbuy.com/click/-/4784058/pdp", "free_shipping": false, "rating": 4, "popularity": 15883, "objectID": "4784058", "_highlightResult": { "name": { "value": "Beats by Dr. Dre - Geek Squad Certified Refurbished Beats Studio Wireless On-Ear Headphones - Red", "matchLevel": "full", "fullyHighlighted": false, "matchedWords": ["beats", "by", "dr"] }, "description": { "value": "Rock out to your favorite songs with these Beats by Dr. Dre Beats Studio Wireless GS-MH8K2AM/A headphones that feature a Beats Acoustic Engine and DSP software for enhanced clarity. ANC (Adaptive Noise Cancellation) allows you to focus on your tunes.", "matchLevel": "full", "fullyHighlighted": false, "matchedWords": ["beats", "by", "dr"] }, "brand": { "value": "Beats by Dr. Dre", "matchLevel": "full", "fullyHighlighted": false, "matchedWords": ["beats", "by", "dr"] }, "categories": [{ "value": "Audio", "matchLevel": "none", "matchedWords": [] }, { "value": "Headphones", "matchLevel": "none", "matchedWords": [] }, { "value": "All Headphones", "matchLevel": "none", "matchedWords": [] }] }, "quantity": 1, "discount_in_percentage": 12, "offers_count": 3, "delivery_date": "Wed Apr 9" }, + { "name": "Sony - PlayStation 4 Pro Console", "description": "PS4 Pro Dynamic 4K Gaming & 4K Entertainment* PS4 Pro gets you closer to your game. Heighten your experiences. Enrich your adventures. Let the super-charged PS4 Pro lead the way.** GREATNESS AWAITS", "brand": "Sony", "categories": ["Video Games", "PlayStation 4", "PS4 Consoles"], "hierarchicalCategories": { "lvl0": "Video Games", "lvl1": "Video Games > PlayStation 4", "lvl2": "Video Games > PlayStation 4 > PS4 Consoles" }, "type": "Playstation 4 hw", "price": 399.99, "price_range": "200 - 500", "image": "https://cdn-demo.algolia.com/bestbuy-0118/5388900_sb.jpg", "url": "https://api.bestbuy.com/click/-/5388900/pdp", "free_shipping": true, "rating": 4, "popularity": 21402, "objectID": "5388900", "_highlightResult": { "name": { "value": "Sony - PlayStation 4 Pro Console", "matchLevel": "full", "fullyHighlighted": false, "matchedWords": ["sony", "pla"] }, "description": { "value": "PS4 Pro Dynamic 4K Gaming & 4K Entertainment* PS4 Pro gets you closer to your game. Heighten your experiences. Enrich your adventures. Let the super-charged PS4 Pro lead the way.** GREATNESS AWAITS", "matchLevel": "none", "matchedWords": [] }, "brand": { "value": "Sony", "matchLevel": "partial", "fullyHighlighted": true, "matchedWords": ["sony"] }, "categories": [{ "value": "Video Games", "matchLevel": "none", "matchedWords": [] }, { "value": "PlayStation 4", "matchLevel": "partial", "fullyHighlighted": false, "matchedWords": ["pla"] }, { "value": "PS4 Consoles", "matchLevel": "none", "matchedWords": [] }] }, "quantity": 1, "discount_in_percentage": 3, "offers_count": 1, "delivery_date": "Wed Apr 12" }, + { "name": "Apple - Macbook® (Latest Model) - 12\" Display - Intel Core M5 - 8GB Memory - 512GB Flash Storage - Space Gray", "description": "MacBook delivers a full-size experience in the lightest and most compact Mac notebook ever. With a full-size keyboard, force-sensing trackpad, 12-inch Retina display,1 sixth-generation Intel Core M processor, multifunctional USB-C port, and now up to 10 hours of battery life,2 MacBook features big thinking in an impossibly compact form.", "brand": "Apple", "categories": ["Computers & Tablets", "Laptops", "All Laptops", "MacBooks"], "hierarchicalCategories": { "lvl0": "Computers & Tablets", "lvl1": "Computers & Tablets > Laptops", "lvl2": "Computers & Tablets > Laptops > All Laptops", "lvl3": "Computers & Tablets > Laptops > All Laptops > MacBooks" }, "type": "Apple", "price": 1599.99, "price_range": "500 - 2000", "image": "https://cdn-demo.algolia.com/bestbuy-0118/5229600_sb.jpg", "url": "https://api.bestbuy.com/click/-/5229600/pdp", "free_shipping": true, "rating": 4, "popularity": 19609, "objectID": "5229600", "_highlightResult": { "name": { "value": "Apple - Macbook® (Latest Model) - 12" Display - Intel Core M5 - 8GB Memory - 512GB Flash Storage - Space Gray", "matchLevel": "partial", "fullyHighlighted": false, "matchedWords": ["apple"] }, "description": { "value": "MacBook delivers a full-size experience in the lightest and most compact Mac notebook ever. With a full-size keyboard, force-sensing trackpad, 12-inch Retina display,1 sixth-generation Intel Core M processor, multifunctional USB-C port, and now up to 10 hours of battery life,2 MacBook features big thinking in an impossibly compact form.", "matchLevel": "none", "matchedWords": [] }, "brand": { "value": "Apple", "matchLevel": "partial", "fullyHighlighted": true, "matchedWords": ["apple"] }, "categories": [{ "value": "Computers & Tablets", "matchLevel": "none", "matchedWords": [] }, { "value": "Laptops", "matchLevel": "partial", "fullyHighlighted": true, "matchedWords": ["laptop"] }, { "value": "All Laptops", "matchLevel": "partial", "fullyHighlighted": false, "matchedWords": ["laptop"] }, { "value": "MacBooks", "matchLevel": "none", "matchedWords": [] }] }, "quantity": 1, "discount_in_percentage": 7, "offers_count": 1, "delivery_date": "Wed Apr 14" }, + { "name": "Apple - Apple Watch Series 1 42mm Space Gray Aluminum Case Black Sport Band - Space Gray Aluminum", "description": "Durable, lightweight aluminum cases in silver, space gray, gold, and rose gold. Sport Band in a variety of colors. All the features of the original Apple Watch, plus a new dual-core processor for faster performance. All models run watchOS 3. Requires an iPhone 5 or later.", "brand": "Apple", "categories": ["Wearable Technology", "Apple Watch", "Apple Watch Series 1"], "hierarchicalCategories": { "lvl0": "Wearable Technology", "lvl1": "Wearable Technology > Apple Watch", "lvl2": "Wearable Technology > Apple Watch > Apple Watch Series 1" }, "type": "Standard apple watch", "price": 299, "price_range": "200 - 500", "image": "https://cdn-demo.algolia.com/bestbuy-0118/5546604_sb.jpg", "url": "https://api.bestbuy.com/click/-/5546604/pdp", "free_shipping": true, "rating": 4, "popularity": 21419, "objectID": "5546604", "_highlightResult": { "name": { "value": "Apple - Apple Watch Series 1 42mm Space Gray Aluminum Case Black Sport Band - Space Gray Aluminum", "matchLevel": "full", "fullyHighlighted": false, "matchedWords": ["apple"] }, "description": { "value": "Durable, lightweight aluminum cases in silver, space gray, gold, and rose gold. Sport Band in a variety of colors. All the features of the original Apple Watch, plus a new dual-core processor for faster performance. All models run watchOS 3. Requires an iPhone 5 or later.", "matchLevel": "full", "fullyHighlighted": false, "matchedWords": ["apple"] }, "brand": { "value": "Apple", "matchLevel": "full", "fullyHighlighted": true, "matchedWords": ["apple"] }, "categories": [{ "value": "Wearable Technology", "matchLevel": "none", "matchedWords": [] }, { "value": "Apple Watch", "matchLevel": "full", "fullyHighlighted": false, "matchedWords": ["apple"] }, { "value": "Apple Watch Series 1", "matchLevel": "full", "fullyHighlighted": false, "matchedWords": ["apple"] }], "type": { "value": "Standard apple watch", "matchLevel": "full", "fullyHighlighted": false, "matchedWords": ["apple"] } }, "quantity": 1, "discount_in_percentage": 17, "offers_count": 4, "delivery_date": "Wed Apr 15" }, + ], + wishList: [ + { "name": "Bowers & Wilkins - CM10 S2 Triple 6-1/2\" 3-Way Floorstanding Speaker (Each) - Gloss Black", "description": "Featuring triple 6-1/2\" bass cones, a 6\" midrange cone and a 1\" tweeter, this Bowers & Wilkins CM10 S2 floorstanding speaker fills a large room with stunning, true-to-life audio. The tweeter-on-top design ensures studio-grade sound is emitted.", "brand": "Bowers & Wilkins", "categories": ["Audio", "Home Audio", "Speakers", "Floor Speakers"], "hierarchicalCategories": { "lvl0": "Audio", "lvl1": "Audio > Home Audio", "lvl2": "Audio > Home Audio > Speakers", "lvl3": "Audio > Home Audio > Speakers > Floor Speakers" }, "type": "Mht floor speakers", "price": 1999.98, "price_range": "500 - 2000", "image": "https://cdn-demo.algolia.com/bestbuy-0118/8434275_sb.jpg", "url": "https://api.bestbuy.com/click/-/8434275/pdp", "free_shipping": false, "rating": 5, "popularity": 17253, "objectID": "8434275", "_highlightResult": { "name": { "value": "Bowers & Wilkins - CM10 S2 Triple 6-1/2" 3-Way Floorstanding Speaker (Each) - Gloss Black", "matchLevel": "none", "matchedWords": [] }, "description": { "value": "Featuring triple 6-1/2" bass cones, a 6" midrange cone and a 1" tweeter, this Bowers & Wilkins CM10 S2 floorstanding speaker fills a large room with stunning, true-to-life audio. The tweeter-on-top design ensures studio-grade sound is emitted.", "matchLevel": "none", "matchedWords": [] }, "brand": { "value": "Bowers & Wilkins", "matchLevel": "none", "matchedWords": [] }, "categories": [{ "value": "Audio", "matchLevel": "none", "matchedWords": [] }, { "value": "Home Audio", "matchLevel": "none", "matchedWords": [] }, { "value": "Speakers", "matchLevel": "none", "matchedWords": [] }, { "value": "Floor Speakers", "matchLevel": "none", "matchedWords": [] }] } }, + { "name": "Samsung - Chef Collection 34.3 Cu. Ft. 4-Door Flex French Door Refrigerator with Thru-the-Door Ice and Water - Stainless Steel", "description": "Samsung 34.3 Cu. Ft. Frost-Free 4-Door Flex French Door Refrigerator with Thru-the Door Ice and Water: Take the utmost care of your ingredients, and keep them all organized, with this ultralarge-capacity Chef Collection refrigerator. It features 2 compressors, 3 evaporators and 4 temperature zones, keeping foods at their optimum temperature for freshness and flavor.", "brand": "Samsung", "categories": ["Appliances", "Refrigerators", "All Refrigerators"], "hierarchicalCategories": { "lvl0": "Appliances", "lvl1": "Appliances > Refrigerators", "lvl2": "Appliances > Refrigerators > All Refrigerators" }, "type": "French door refrig", "price": 4999.99, "price_range": "> 2000", "image": "https://cdn-demo.algolia.com/bestbuy-0118/4039001_sb.jpg", "url": "https://api.bestbuy.com/click/-/4039001/pdp", "free_shipping": false, "rating": 4, "popularity": 17400, "objectID": "4039001", "_highlightResult": { "name": { "value": "Samsung - Chef Collection 34.3 Cu. Ft. 4-Door Flex French Door Refrigerator with Thru-the-Door Ice and Water - Stainless Steel", "matchLevel": "none", "matchedWords": [] }, "description": { "value": "Samsung 34.3 Cu. Ft. Frost-Free 4-Door Flex French Door Refrigerator with Thru-the Door Ice and Water: Take the utmost care of your ingredients, and keep them all organized, with this ultralarge-capacity Chef Collection refrigerator. It features 2 compressors, 3 evaporators and 4 temperature zones, keeping foods at their optimum temperature for freshness and flavor.", "matchLevel": "none", "matchedWords": [] }, "brand": { "value": "Samsung", "matchLevel": "none", "matchedWords": [] }, "categories": [{ "value": "Appliances", "matchLevel": "none", "matchedWords": [] }, { "value": "Refrigerators", "matchLevel": "none", "matchedWords": [] }, { "value": "All Refrigerators", "matchLevel": "none", "matchedWords": [] }] } }, + { "name": "Canon - EOS 5D Mark IV DSLR Camera with 24-70mm f/4L IS USM Lens", "description": "Shoot professional photos and videos with this Canon EOS 5D Mk V 24-70mm lens kit. A huge 30.4-megapixel full-frame sensor delivers outstanding image clarity, and 4K video is possible from this DSLR for powerful films. Ultra-precise autofocus and huge ISO ranges give you the images you want from this Canon EOS 5D Mk V 24-70mm lens kit.", "brand": "Canon", "categories": ["Cameras & Camcorders", "Digital Cameras", "Digital SLR Cameras", "DSLR Body & Lens"], "hierarchicalCategories": { "lvl0": "Cameras & Camcorders", "lvl1": "Cameras & Camcorders > Digital Cameras", "lvl2": "Cameras & Camcorders > Digital Cameras > Digital SLR Cameras", "lvl3": "Cameras & Camcorders > Digital Cameras > Digital SLR Cameras > DSLR Body & Lens" }, "type": "Dslr cameras", "price": 4399.99, "price_range": "> 2000", "image": "https://cdn-demo.algolia.com/bestbuy-0118/5578528_rb.jpg", "url": "https://api.bestbuy.com/click/-/5578528/pdp", "free_shipping": true, "rating": 4, "popularity": 16298, "objectID": "5578528", "_highlightResult": { "name": { "value": "Canon - EOS 5D Mark IV DSLR Camera with 24-70mm f/4L IS USM Lens", "matchLevel": "none", "matchedWords": [] }, "description": { "value": "Shoot professional photos and videos with this Canon EOS 5D Mk V 24-70mm lens kit. A huge 30.4-megapixel full-frame sensor delivers outstanding image clarity, and 4K video is possible from this DSLR for powerful films. Ultra-precise autofocus and huge ISO ranges give you the images you want from this Canon EOS 5D Mk V 24-70mm lens kit.", "matchLevel": "none", "matchedWords": [] }, "brand": { "value": "Canon", "matchLevel": "none", "matchedWords": [] }, "categories": [{ "value": "Cameras & Camcorders", "matchLevel": "none", "matchedWords": [] }, { "value": "Digital Cameras", "matchLevel": "none", "matchedWords": [] }, { "value": "Digital SLR Cameras", "matchLevel": "none", "matchedWords": [] }, { "value": "DSLR Body & Lens", "matchLevel": "none", "matchedWords": [] }] } }, + { "name": "Apple - 27\" iMac with Retina 5K display - Intel Core i7 - 32GB Memory - 2TB Fusion Drive - Silver", "description": "With 14.7 million pixels, the 27-inch iMac with Retina 5K display is the most powerful iMac ever. It features quad-core Intel® processors, the latest AMD graphics, 2TB Fusion Drive, and great built-in apps. All in the same ultrathin design that's just 5mm at the edge.", "brand": "Apple", "categories": ["Computers & Tablets", "All Desktops"], "hierarchicalCategories": { "lvl0": "Computers & Tablets", "lvl1": "Computers & Tablets > All Desktops" }, "type": "Apple cpu's", "price": 3199.99, "price_range": "> 2000", "image": "https://cdn-demo.algolia.com/bestbuy-0118/5622404_sb.jpg", "url": "https://api.bestbuy.com/click/-/5622404/pdp", "free_shipping": true, "rating": 4, "popularity": 16050, "objectID": "5622404", "_highlightResult": { "name": { "value": "Apple - 27" iMac with Retina 5K display - Intel Core i7 - 32GB Memory - 2TB Fusion Drive - Silver", "matchLevel": "none", "matchedWords": [] }, "description": { "value": "With 14.7 million pixels, the 27-inch iMac with Retina 5K display is the most powerful iMac ever. It features quad-core Intel® processors, the latest AMD graphics, 2TB Fusion Drive, and great built-in apps. All in the same ultrathin design that's just 5mm at the edge.", "matchLevel": "none", "matchedWords": [] }, "brand": { "value": "Apple", "matchLevel": "none", "matchedWords": [] }, "categories": [{ "value": "Computers & Tablets", "matchLevel": "none", "matchedWords": [] }, { "value": "All Desktops", "matchLevel": "none", "matchedWords": [] }] } }, + { "name": "Amazon - Fire TV Stick with Alexa Voice Remote - Black", "description": "Enjoy smart access to videos, games and apps with this Amazon Fire TV stick. Its Alexa voice remote lets you deliver hands-free commands when you want to watch television or engage with other applications. With a quad-core processor, 1GB internal memory and 8GB of storage, this portable Amazon Fire TV stick works fast for buffer-free streaming.", "brand": "Amazon", "categories": ["TV & Home Theater", "Streaming Media Players"], "hierarchicalCategories": { "lvl0": "TV & Home Theater", "lvl1": "TV & Home Theater > Streaming Media Players" }, "type": "Streaming media plyr", "price": 39.99, "price_range": "1 - 50", "image": "https://cdn-demo.algolia.com/bestbuy-0118/5477500_sb.jpg", "url": "https://api.bestbuy.com/click/-/5477500/pdp", "free_shipping": false, "rating": 4, "popularity": 21469, "objectID": "5477500", "_highlightResult": { "name": { "value": "Amazon - Fire TV Stick with Alexa Voice Remote - Black", "matchLevel": "none", "matchedWords": [] }, "description": { "value": "Enjoy smart access to videos, games and apps with this Amazon Fire TV stick. Its Alexa voice remote lets you deliver hands-free commands when you want to watch television or engage with other applications. With a quad-core processor, 1GB internal memory and 8GB of storage, this portable Amazon Fire TV stick works fast for buffer-free streaming.", "matchLevel": "none", "matchedWords": [] }, "brand": { "value": "Amazon", "matchLevel": "none", "matchedWords": [] }, "categories": [{ "value": "TV & Home Theater", "matchLevel": "none", "matchedWords": [] }, { "value": "Streaming Media Players", "matchLevel": "none", "matchedWords": [] }], "type": { "value": "Streaming media plyr", "matchLevel": "none", "matchedWords": [] } } }, + { "name": "Alienware - 17.3\" Laptop - Intel Core i7 - 16GB Memory - NVIDIA GeForce GTX 1070 - 1TB Hard Drive + 128GB Solid State Drive - Silver", "description": "Alienware Laptop: Bring video games to life with this 17.3-inch Dell Alienware laptop. It has a powerful quad-core Intel Core i7 processor and 16GB of DDR4 RAM to run modern games quickly, and its 1TB hard drive stores plenty of game and other files. This Dell Alienware laptop has a 2.1 speaker configuration with a subwoofer for a dynamic gaming experience.", "brand": "Alienware", "categories": [ "Computers & Tablets", "Laptops" ], "hierarchicalCategories": { "lvl0": "Computers & Tablets", "lvl1": "Computers & Tablets > Laptops" }, "type": "Gaming laptops", "price": 1999.99, "price_range": "500 - 2000", "image": "https://cdn-demo.algolia.com/bestbuy-0118/5713010_sb.jpg", "url": "https://api.bestbuy.com/click/-/5713010/pdp", "free_shipping": false, "rating": 0, "popularity": 14033, "objectID": "5713010", "_highlightResult": { "name": { "value": "Alienware - 17.3" Laptop - Intel Core i7 - 16GB Memory - NVIDIA GeForce GTX 1070 - 1TB Hard Drive + 128GB Solid State Drive - Silver", "matchLevel": "full", "fullyHighlighted": false, "matchedWords": [ "alien" ] }, "description": { "value": "Alienware Laptop: Bring video games to life with this 17.3-inch Dell Alienware laptop. It has a powerful quad-core Intel Core i7 processor and 16GB of DDR4 RAM to run modern games quickly, and its 1TB hard drive stores plenty of game and other files. This Dell Alienware laptop has a 2.1 speaker configuration with a subwoofer for a dynamic gaming experience.", "matchLevel": "full", "fullyHighlighted": false, "matchedWords": [ "alien" ] }, "brand": { "value": "Alienware", "matchLevel": "full", "fullyHighlighted": false, "matchedWords": [ "alien" ] }, "categories": [ { "value": "Computers & Tablets", "matchLevel": "none", "matchedWords": [] }, { "value": "Laptops", "matchLevel": "none", "matchedWords": [] } ] } }, + { "name": "Garmin - fenix 3 Sapphire GPS Watch - Silver", "description": "This Garmin fenix 3 Sapphire GPS watch comes with a titanium bezel and band, providing style and strength. This watch is waterproof up to 100m, and it comes with state-of-the-art fitness training features such as advanced running dynamics with vertical oscillation and vertical ratio. Track your activity and stay fit with the Garmin fenix 3 Sapphire GPS watch.", "brand": "Garmin", "categories": [ "Health, Fitness & Beauty", "Fitness & GPS Watches" ], "hierarchicalCategories": { "lvl0": "Health, Fitness & Beauty", "lvl1": "Health, Fitness & Beauty > Fitness & GPS Watches" }, "type": "", "price": 649.99, "price_range": "500 - 2000", "image": "https://cdn-demo.algolia.com/bestbuy-0118/4922801_sb.jpg", "url": "https://api.bestbuy.com/click/-/4922801/pdp", "free_shipping": true, "rating": 4, "popularity": 12115, "objectID": "4922801", "_highlightResult": { "name": { "value": "Garmin - fenix 3 Sapphire GPS Watch - Silver", "matchLevel": "none", "matchedWords": [] }, "description": { "value": "This Garmin fenix 3 Sapphire GPS watch comes with a titanium bezel and band, providing style and strength. This watch is waterproof up to 100m, and it comes with state-of-the-art fitness training features such as advanced running dynamics with vertical oscillation and vertical ratio. Track your activity and stay fit with the Garmin fenix 3 Sapphire GPS watch.", "matchLevel": "none", "matchedWords": [] }, "brand": { "value": "Garmin", "matchLevel": "none", "matchedWords": [] }, "categories": [ { "value": "Health, Fitness & Beauty", "matchLevel": "none", "matchedWords": [] }, { "value": "Fitness & GPS Watches", "matchLevel": "none", "matchedWords": [] } ] } }, + { "name": "Garmin - fēnix 5 GPS Heart Rate Monitor Watch - Slate gray", "description": "Map your adventure with this Garmin Fenix 5 GPS watch. Built-in navigation lets you know where you are when hiking or camping, and integrated Wi-Fi connects to the Garmin Connect to track your fitness level and daily steps. This Garmin Fenix 5 GPS watch is water-resistant up to 100m for use in wet conditions.", "brand": "Garmin", "categories": [ "Health, Fitness & Beauty", "Fitness & GPS Watches" ], "hierarchicalCategories": { "lvl0": "Health, Fitness & Beauty", "lvl1": "Health, Fitness & Beauty > Fitness & GPS Watches" }, "type": "Monitoring devices", "price": 599.99, "price_range": "500 - 2000", "image": "https://cdn-demo.algolia.com/bestbuy-0118/5714479_sb.jpg", "url": "https://api.bestbuy.com/click/-/5714479/pdp", "free_shipping": false, "rating": 0, "popularity": 12534, "objectID": "5714479", "_highlightResult": { "name": { "value": "Garmin - fēnix 5 GPS Heart Rate Monitor Watch - Slate gray", "matchLevel": "none", "matchedWords": [] }, "description": { "value": "Map your adventure with this Garmin Fenix 5 GPS watch. Built-in navigation lets you know where you are when hiking or camping, and integrated Wi-Fi connects to the Garmin Connect to track your fitness level and daily steps. This Garmin Fenix 5 GPS watch is water-resistant up to 100m for use in wet conditions.", "matchLevel": "none", "matchedWords": [] }, "brand": { "value": "Garmin", "matchLevel": "none", "matchedWords": [] }, "categories": [ { "value": "Health, Fitness & Beauty", "matchLevel": "none", "matchedWords": [] }, { "value": "Fitness & GPS Watches", "matchLevel": "none", "matchedWords": [] } ] } }, + { "name": "Beats by Dr. Dre - Powerbeats2 Wireless Earbud Headphones - Black/Red", "description": "Beats by Dr. Dre Powerbeats2: These workout headphones are crafted to keep up with your active routine. The no-slip design of the call answer button ensures phone calls won't be missed, and music can be easily cycled through.", "brand": "Beats by Dr. Dre", "categories": [ "Audio", "Headphones", "Wireless Headphones" ], "hierarchicalCategories": { "lvl0": "Audio", "lvl1": "Audio > Headphones", "lvl2": "Audio > Headphones > Wireless Headphones" }, "type": "Wireless in ears", "price": 199.99, "price_range": "100 - 200", "image": "https://cdn-demo.algolia.com/bestbuy/5565002_sb.jpg", "url": "http://www.bestbuy.com/site/beats-by-dr-dre-powerbeats2-wireless-earbud-headphones-black-red/5565002.p?id=1219139426902&skuId=5565002&cmp=RMX&ky=1uWSHMdQqBeVJB9cXgEke60s5EjfS6M1W", "free_shipping": false, "popularity": 9059, "rating": 4, "objectID": "5565002" }, + { "name": "Asus - ROG Desktop - Intel Core i7 - 16GB Memory - Double NVIDIA GeForce GTX1080 - 1TB Hard Drive + 2x512GB Solid State Drive - Gray", "description": "Place the sleek form of this ASUS desktop computer tower on your desk, and take your gaming to the next level. With Intel Core i7 processing inside, this speedy desktop keeps up with even multilayered action games. Nvidia graphics on this ASUS desktop computer help eliminate ghosting and stutter so you see every move your enemy makes.", "brand": "Asus", "categories": [ "Video Games", "PC Gaming", "Virtual Reality for PC" ], "hierarchicalCategories": { "lvl0": "Video Games", "lvl1": "Video Games > PC Gaming", "lvl2": "Video Games > PC Gaming > Virtual Reality for PC" }, "type": "", "price": 4999.99, "price_range": "> 2000", "image": "https://cdn-demo.algolia.com/bestbuy-0118/5582501_sb.jpg", "url": "https://api.bestbuy.com/click/-/5582501/pdp", "free_shipping": false, "rating": 1, "popularity": 9684, "objectID": "5582501", "_highlightResult": { "name": { "value": "Asus - ROG Desktop - Intel Core i7 - 16GB Memory - Double NVIDIA GeForce GTX1080 - 1TB Hard Drive + 2x512GB Solid State Drive - Gray", "matchLevel": "none", "matchedWords": [] }, "description": { "value": "Place the sleek form of this ASUS desktop computer tower on your desk, and take your gaming to the next level. With Intel Core i7 processing inside, this speedy desktop keeps up with even multilayered action games. Nvidia graphics on this ASUS desktop computer help eliminate ghosting and stutter so you see every move your enemy makes.", "matchLevel": "none", "matchedWords": [] }, "brand": { "value": "Asus", "matchLevel": "none", "matchedWords": [] }, "categories": [ { "value": "Video Games", "matchLevel": "none", "matchedWords": [] }, { "value": "PC Gaming", "matchLevel": "none", "matchedWords": [] }, { "value": "Virtual Reality for PC", "matchLevel": "none", "matchedWords": [] } ] } }, + { "name": "Sony - ZX Series On-Ear Headphones - Black", "description": "These Sony ZX Series MDRZX110/BLK headphones feature neodymium magnets and 30mm drivers for powerful, reinforced sound. Enjoy your favorite songs with lush bass response thanks to the Acoustic Bass Booster technology.", "brand": "Sony", "categories": [ "Audio", "Headphones", "On-Ear Headphones" ], "hierarchicalCategories": { "lvl0": "Audio", "lvl1": "Audio > Headphones", "lvl2": "Audio > Headphones > On-Ear Headphones" }, "type": "On ear headphones", "price": 19.99, "price_range": "1 - 50", "image": "https://cdn-demo.algolia.com/bestbuy-0118/8618232_sb.jpg", "url": "https://api.bestbuy.com/click/-/8618232/pdp", "free_shipping": true, "rating": 4, "popularity": 21400, "objectID": "8618232", "_highlightResult": { "name": { "value": "Sony - ZX Series On-Ear Headphones - Black", "matchLevel": "none", "matchedWords": [] }, "description": { "value": "These Sony ZX Series MDRZX110/BLK headphones feature neodymium magnets and 30mm drivers for powerful, reinforced sound. Enjoy your favorite songs with lush bass response thanks to the Acoustic Bass Booster technology.", "matchLevel": "none", "matchedWords": [] }, "brand": { "value": "Sony", "matchLevel": "none", "matchedWords": [] }, "categories": [ { "value": "Audio", "matchLevel": "none", "matchedWords": [] }, { "value": "Headphones", "matchLevel": "none", "matchedWords": [] }, { "value": "On-Ear Headphones", "matchLevel": "none", "matchedWords": [] } ], "type": { "value": "On ear headphones", "matchLevel": "none", "matchedWords": [] } } } + ] +} +/* eslint-enable */ diff --git a/src/store/email/moduleEmail.js b/src/store/email/moduleEmail.js new file mode 100644 index 0000000..4d7a473 --- /dev/null +++ b/src/store/email/moduleEmail.js @@ -0,0 +1,22 @@ +/*========================================================================================= + File Name: moduleEmail.js + Description: Email Module + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + + +import state from './moduleEmailState.js' +import mutations from './moduleEmailMutations.js' +import actions from './moduleEmailActions.js' +import getters from './moduleEmailGetters.js' + +export default { + namespaced: true, + state, + mutations, + actions, + getters +} diff --git a/src/store/email/moduleEmailActions.js b/src/store/email/moduleEmailActions.js new file mode 100644 index 0000000..6766a7d --- /dev/null +++ b/src/store/email/moduleEmailActions.js @@ -0,0 +1,121 @@ +/*========================================================================================= + File Name: moduleEmailActions.js + Description: Email Module Actions + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + +import axios from '@/axios.js' + +export default { + setEmailSearchQuery ({ commit }, query) { + commit('SET_EMAIL_SEARCH_QUERY', query) + }, + + // Fetch emails + fetchEmails ({ commit }, payload) { + return new Promise((resolve, reject) => { + axios.get('/api/apps/email/mails', { params: {filter: payload.filter} }) + .then((response) => { + commit('SET_MAILS', response.data) + resolve(response) + }) + .catch((error) => { reject(error) }) + }) + }, + + // Fetch Tags + fetchTags ({ commit }) { + return new Promise((resolve, reject) => { + axios.get('/api/apps/email/tags') + .then((response) => { + commit('SET_TAGS', response.data) + resolve(response) + }) + .catch((error) => { reject(error) }) + }) + }, + + // Fetch Email Meta + fetchMeta ({ commit }) { + return new Promise((resolve, reject) => { + axios.get('/api/apps/email/meta') + .then((response) => { + commit('SET_META', response.data) + resolve(response) + }) + .catch((error) => { reject(error) }) + }) + }, + + // Move mails to another folder + moveMailsTo ({ commit }, payload) { + return new Promise((resolve, reject) => { + axios.post('/api/apps/email/move-mails', { emailIds: payload.emailIds, + mailFolder: payload.to }) + .then((response) => { + commit('MOVE_MAILS_TO', payload) + commit('UPDATE_UNREAD_META_ON_MOVE', payload) + resolve(response) + }) + .catch((error) => { reject(error) }) + }) + }, + + // Update Mails label + updateLabels ({ commit }, payload) { + return new Promise((resolve, reject) => { + axios.post('/api/apps/email/update-labels', { emailIds: payload.mails, + label: payload.label }) + .then((response) => { + commit('UPDATE_LABELS', payload) + resolve(response) + }) + .catch((error) => { reject(error) }) + }) + }, + + setLabels ({ commit }, payload) { + return new Promise((resolve, reject) => { + axios.post('/api/apps/email/set-labels', { mailId: payload.mailId, + labels: payload.labels }) + .then((response) => { + commit('SET_LABELS', payload) + resolve(response) + }) + .catch((error) => { reject(error) }) + }) + }, + + // Set mails flag unread to true + setUnread ({ commit }, payload) { + return new Promise((resolve, reject) => { + axios.post('/api/apps/email/mark-unread', { emailIds: payload.emailIds, + unreadFlag: payload.unreadFlag }) + .then((response) => { + commit('SET_UNREAD', payload) + + // Remove this if you are getting meta like us + // Use your own method to update email meta if you are fetching email meta + commit('UPDATE_UNREAD_META', payload) + resolve(response) + }) + .catch((error) => { reject(error) }) + }) + }, + + // Toggle isStarred flag in mail + toggleIsMailStarred ({ commit }, payload) { + return new Promise((resolve, reject) => { + axios.post('/api/apps/email/set-starred', { mailId: payload.mailId, + value: payload.value }) + .then((response) => { + commit('TOGGLE_IS_MAIL_STARRED', payload) + resolve(response) + }) + .catch((error) => { reject(error) }) + }) + } +} diff --git a/src/store/email/moduleEmailGetters.js b/src/store/email/moduleEmailGetters.js new file mode 100644 index 0000000..8f78ac7 --- /dev/null +++ b/src/store/email/moduleEmailGetters.js @@ -0,0 +1,16 @@ +/*========================================================================================= + File Name: moduleEmailGetters.js + Description: Email Module Getters + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + + +export default { + filteredMails: state => state.mails.filter((mail) => { + return (state.mail_filter === 'starred' ? mail.isStarred : state.mail_filter === mail.mailFolder || mail.labels.includes(state.mail_filter)) && (mail.sender_name.toLowerCase().includes(state.mailSearchQuery.toLowerCase()) || mail.sender.toLowerCase().includes(state.mailSearchQuery.toLowerCase()) || mail.subject.toLowerCase().includes(state.mailSearchQuery.toLowerCase()) || mail.message.toLowerCase().includes(state.mailSearchQuery.toLowerCase())) + }), + getMail: state => (emailId) => state.mails.find((email) => email.id === emailId) +} diff --git a/src/store/email/moduleEmailMutations.js b/src/store/email/moduleEmailMutations.js new file mode 100644 index 0000000..bf644b4 --- /dev/null +++ b/src/store/email/moduleEmailMutations.js @@ -0,0 +1,112 @@ +/*========================================================================================= + File Name: moduleEmailMutations.js + Description: Email Module Mutations + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + + +export default { + SET_EMAIL_SEARCH_QUERY (state, query) { + state.mailSearchQuery = query + }, + SET_MAILS (state, mails) { + state.mails = mails + }, + SET_TAGS (state, tags) { + state.mailTags = tags + }, + SET_META (state, meta) { + state.meta = meta + }, + UPDATE_MAIL_FILTER (state, filterName) { + state.mail_filter = filterName + }, + UPDATE_LABELS (state, payload) { + payload.mails.forEach((mailId) => { + const mailIndex = state.mails.findIndex((mail) => mail.id === mailId) + const index = state.mails[mailIndex].labels.indexOf(payload.label) + + if (index === -1) state.mails[mailIndex].labels.push(payload.label) + else state.mails[mailIndex].labels.splice(index, 1) + }) + }, + SET_LABELS (state, payload) { + state.mails.find((mail) => mail.id === payload.mailId).labels = payload.labels + }, + SET_UNREAD (state, payload) { + payload.emailIds.forEach((mailId) => { + const mailIndex = state.mails.findIndex((mail) => mail.id === mailId) + if (mailIndex !== -1) state.mails[mailIndex].unread = payload.unreadFlag + }) + }, + + MOVE_MAILS_TO (state, payload) { + payload.emailIds.forEach((mailId) => { + const mailIndex = state.mails.findIndex((mail) => mail.id === mailId) + + // Update draft meta + // If moving from draft mailFolder decrease draft meta by removing mailId + if (state.mails[mailIndex].mailFolder === 'draft') { + state.meta.draftMails.splice(state.meta.draftMails.findIndex(i => i === mailId), 1) + } + // Else increase by pushing mailId + if (payload.to === 'draft') { + state.meta.draftMails.push(mailId) + } + + state.mails[mailIndex].mailFolder = payload.to + }) + }, + + TOGGLE_IS_MAIL_STARRED (state, payload) { + state.mails.find((mail) => mail.id === payload.mailId).isStarred = payload.value + }, + + // If your process of fetching is different than ours. Please update action and mutation + // Maybe this mutation is redundant for you. Feel free to remove it. + UPDATE_UNREAD_META (state, payload) { + + // Loop over email meta + for (const folder in state.meta.unreadMails.folder) { + + // If folder is same as current filter + if (folder === state.mail_filter) { + + if (payload.unreadFlag) { + + // If unread flag is true - increase count + payload.emailIds.forEach((mailId) => { + if (state.meta.unreadMails.folder[folder].indexOf(mailId) === -1) state.meta.unreadMails.folder[folder].push(mailId) + }) + } else { + + // else reduce unread mails count + payload.emailIds.forEach((mailId) => { + const mailIdIndex = state.meta.unreadMails.folder[folder].indexOf(mailId) + if (mailIdIndex !== -1) state.meta.unreadMails.folder[folder].splice(mailIdIndex, 1) + }) + } + + } + } + }, + UPDATE_UNREAD_META_ON_MOVE (state, payload) { + + // Updating Draft meta is handled by "MOVE_MAILS_TO" mutation + + payload.emailIds.forEach((mailId) => { + const mail = state.mails.find((mail) => mail.id === mailId) + + if (mail.unread) { + const cf_unread_mails = state.meta.unreadMails.folder[state.mail_filter] + if (cf_unread_mails) { + cf_unread_mails.splice(cf_unread_mails.indexOf(mailId), 1) + } + if (state.meta.unreadMails.folder[payload.to]) state.meta.unreadMails.folder[payload.to].push(mailId) + } + }) + } +} diff --git a/src/store/email/moduleEmailState.js b/src/store/email/moduleEmailState.js new file mode 100644 index 0000000..dcd825b --- /dev/null +++ b/src/store/email/moduleEmailState.js @@ -0,0 +1,17 @@ +/*========================================================================================= + File Name: moduleEmailState.js + Description: Email Module State + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + + +export default { + mails: [], + mail_filter: null, + mailTags: [], + meta: {}, + mailSearchQuery: '' +} diff --git a/src/store/file/file.js b/src/store/file/file.js new file mode 100644 index 0000000..e69de29 diff --git a/src/store/getters.js b/src/store/getters.js new file mode 100644 index 0000000..083ac44 --- /dev/null +++ b/src/store/getters.js @@ -0,0 +1,33 @@ +/*========================================================================================= + File Name: getters.js + Description: Vuex Store - getters + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + +// added so later we can keep breakpoint in sync automatically using this config file +// import tailwindConfig from "../../tailwind.config.js" + +const getters = { + + // COMPONENT + // vx-autosuggest + // starredPages: state => state.navbarSearchAndPinList.data.filter((page) => page.highlightAction), + windowBreakPoint: state => { + + // This should be same as tailwind. So, it stays in sync with tailwind utility classes + if (state.windowWidth >= 1200) return 'xl' + else if (state.windowWidth >= 992) return 'lg' + else if (state.windowWidth >= 768) return 'md' + else if (state.windowWidth >= 576) return 'sm' + else return 'xs' + }, + + scrollbarTag: state => { + return state.is_touch_device ? 'div' : 'VuePerfectScrollbar' + } +} + +export default getters diff --git a/src/store/manage/const.js b/src/store/manage/const.js new file mode 100644 index 0000000..997cdb1 --- /dev/null +++ b/src/store/manage/const.js @@ -0,0 +1,80 @@ +import _ from 'lodash'; +import axios from "../../axios"; + +const state = { + keys: [ + { + id: 'ut', + title: 'نوع کاربری', + icon: 'icon-user', + iconPack: 'feather' + }, + { + id: 'status', + title: 'وضعیت سفارش', + icon: 'icon-user', + iconPack: 'feather' + }, + ], + loading: false, + rows: [ + {id: 1, key: 'ut', val: 'نوع اول'} + ] +}; +const mutations = { + ADD_ITEM(state, data) { + console.log("data ==> ", data); + state.rows.push(data); + }, + INJECT(state , {rows , keys}){ + state.rows = rows || []; + state.keys = keys || []; + }, + LOADING(state, data) { + state.loading = data; + }, + EDIT_ROW(state, data) { + if (data.delete) { + console.log("data.row ==> ", data.row); + console.log("data ==> ", data); + state.rows = _.without(state.rows, _.find(state.rows, (item) => item.val == data.row.val)); + } else { + state.rows[data.index] = data.row; + } + } +}; +const actions = { + async init({commit}){ + commit('LOADING', true); + try { + let res = await axios.get('http://api.doringold.com/admin/config/statics'); + console.log("res ==> " , res); + commit('INJECT' , res.data); + } catch (e) { + + } finally { + commit('LOADING', false); + } + }, + async save({commit ,state}, data) { + commit('LOADING', true); + try { + let res = await axios.post('http://api.doringold.com/config/statics' , state.rows); + + } catch (e) { + + } finally { + commit('LOADING', false); + } + } +}; +const getters = {}; + + +export default { + namespaced: true, + state, + mutations, + actions, + getters +} diff --git a/src/store/manage/index.js b/src/store/manage/index.js new file mode 100644 index 0000000..e69de29 diff --git a/src/store/mutations.js b/src/store/mutations.js new file mode 100644 index 0000000..2f3936a --- /dev/null +++ b/src/store/mutations.js @@ -0,0 +1,141 @@ +/*========================================================================================= + File Name: mutations.js + Description: Vuex Store - mutations + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + + +const mutations = { + + + // ///////////////////////////////////////////// + // COMPONENTS + // ///////////////////////////////////////////// + + // Vertical NavMenu + + TOGGLE_IS_VERTICAL_NAV_MENU_ACTIVE (state, value) { + state.isVerticalNavMenuActive = value + }, + TOGGLE_REDUCE_BUTTON (state, val) { + state.reduceButton = val + }, + UPDATE_MAIN_LAYOUT_TYPE (state, val) { + state.mainLayoutType = val + }, + UPDATE_VERTICAL_NAV_MENU_ITEMS_MIN (state, val) { + state.verticalNavMenuItemsMin = val + }, + UPDATE_VERTICAL_NAV_MENU_WIDTH (state, width) { + state.verticalNavMenuWidth = width + }, + + INIT(state, data) { + state.collection = data; + }, + LOADING(state, payload) { + state.loading = payload; + }, + ERROR(state, payload) { + state.error = payload; + }, + UPDATE_COLLECTION(state, payload) { + state.collectionEdit = state.collectionEdit.map(collection => { + if (collection.id === payload.id) { + return Object.assign({},collection, payload.data) + } + return collection + }) + console.log(state.collection,'users data kole') + }, + + + + + // VxAutoSuggest + + UPDATE_STARRED_PAGE (state, payload) { + + // find item index in search list state + const index = state.navbarSearchAndPinList['pages'].data.findIndex((item) => item.url === payload.url) + + // update the main list + state.navbarSearchAndPinList['pages'].data[index].is_bookmarked = payload.val + + // if val is true add it to starred else remove + if (payload.val) { + state.starredPages.push(state.navbarSearchAndPinList['pages'].data[index]) + } else { + // find item index from starred pages + const index = state.starredPages.findIndex((item) => item.url === payload.url) + + // remove item using index + state.starredPages.splice(index, 1) + } + }, + + // Navbar-Vertical + + ARRANGE_STARRED_PAGES_LIMITED (state, list) { + const starredPagesMore = state.starredPages.slice(10) + state.starredPages = list.concat(starredPagesMore) + }, + ARRANGE_STARRED_PAGES_MORE (state, list) { + let downToUp = false + const lastItemInStarredLimited = state.starredPages[10] + const starredPagesLimited = state.starredPages.slice(0, 10) + state.starredPages = starredPagesLimited.concat(list) + + state.starredPages.slice(0, 10).map((i) => { + if (list.indexOf(i) > -1) downToUp = true + }) + + if (!downToUp) { + state.starredPages.splice(10, 0, lastItemInStarredLimited) + } + }, + + + // //////////////////////////////////////////// + // UI + // //////////////////////////////////////////// + + TOGGLE_CONTENT_OVERLAY (state, val) { state.bodyOverlay = val }, + UPDATE_PRIMARY_COLOR (state, val) { state.themePrimaryColor = val }, + UPDATE_THEME (state, val) { state.theme = val }, + UPDATE_WINDOW_WIDTH (state, width) { state.windowWidth = width }, + UPDATE_WINDOW_SCROLL_Y (state, val) { state.scrollY = val }, + + + // ///////////////////////////////////////////// + // User/Account + // ///////////////////////////////////////////// + + // Updates user info in state and localstorage + UPDATE_USER_INFO (state, payload) { + + // Get Data localStorage + const userInfo = JSON.parse(localStorage.getItem('userInfo')) || state.AppActiveUser + + for (const property of Object.keys(payload)) { + + if (payload[property] !== null) { + // If some of user property is null - user default property defined in state.AppActiveUser + state.AppActiveUser[property] = payload[property] + + // Update key in localStorage + userInfo[property] = payload[property] + } + + + } + // Store data in localStorage + localStorage.setItem('userInfo', JSON.stringify(userInfo)) + } +} + +export default mutations + diff --git a/src/store/order/index.js b/src/store/order/index.js new file mode 100644 index 0000000..c165f09 --- /dev/null +++ b/src/store/order/index.js @@ -0,0 +1,87 @@ +import axios from "@/axios"; + +const state = { + model: {}, + rows: [], + count: 0, + page: 0, + loading: false, + searchQuery: undefined, +}; +const mutations = { + ADD_ITEM(state, data) { + state.rows.push(data); + }, + LOADING(state, data) { + state.loading = data; + }, + SET_PAGE(state, data) { + state.page = data; + }, + SEARCH_QUERY_SET(state, data) { + state.searchQuery = data; + }, + FETCH(state, {rows, count, page}) { + state.rows = rows; + state.count = count || 0; + state.page = page || 0; + }, + INJECT_LIST(state, {count, rows, page}) { + state.count = count; + state.page = page; + state.rows = rows; + } +}; + + +const actions = { + async remove({commit, dispatch}, {id}) { + commit('LOADING', true); + try { + const {data} = await axios.delete('order/' + id); + dispatch('order/fetch'); + } catch (e) { + throw e; + } finally { + commit('LOADING', false); + } + }, + async save({commit, state}, payload) { + commit('LOADING', true); + try { + if (payload.id) { + const {data} = await axios.put(`order/${payload.id}`, payload); + return data; + } else { + const {data} = await axios.post(`order/`, payload); + return data; + } + } catch (e) { + throw e; + } finally { + commit('LOADING', false); + } + }, + async fetch({commit, state}, data) { + commit('LOADING', true); + try { + const {data} = await axios.get('order/', {params: {page: state.page, text_search: state.searchQuery}}); + commit('FETCH', data); + + } catch (e) { + throw e; + } finally { + commit('LOADING', false); + } + } +}; +const getters = {}; + + +export default { + namespaced: true, + state, + mutations, + actions, + getters +} diff --git a/src/store/point/points.js b/src/store/point/points.js new file mode 100644 index 0000000..b4c4aa7 --- /dev/null +++ b/src/store/point/points.js @@ -0,0 +1,121 @@ +import axios from "@/axios"; + +const state = { + loadingDatePoint: false, + loadingDateRequest: false, + loadingCustomerSingle: false, + loadingPointCash: false, + loadingUserPoint: false, + loadingUserPointPayment: false, +}; + +const actions = { + async SendDatePoint({commit}, payload) { + try{ + commit('LOADING_DATE_POINT', true); + const point = await axios.post('admin/score/chart/date',payload) + return point + } + catch (e) { + this.$ntSetError() + } + finally { + commit('LOADING_DATE_POINT', false); + } + }, + async SendDateRequest({commit}, payload) { + try{ + commit('LOADING_DATE_REQUEST', true); + const request = await axios.post('admin/score/chart/exchange',payload) + return request + } + catch (e) { + this.$ntSetError() + } + finally { + commit('LOADING_DATE_REQUEST', false); + } + }, + async CustomerSingle({commit}, payload){ + try{ + commit('LOADING_CUSTOMER_SINGLE', true); + const customer = await axios.get(`admin/score/chart/customer/${payload.customer_id}`,payload) + return customer + } + catch (e) { + this.$ntSetError() + } + finally { + commit('LOADING_CUSTOMER_SINGLE', false); + } + }, + async PointCash({commit}, payload){ + try{ + commit('LOADING_POINT_CASH', true); + const cash = await axios.post('admin/badadv/query/date',payload) + return cash + } + catch (e) { + this.$ntSetError() + } + finally { + commit('LOADING_POINT_CASH', false); + } + }, + async SumUserPoint({commit}, payload){ + try{ + commit('LOADING_USER_POINT', true); + const {data} = await axios.post('admin/score/query/sum',payload) + return data + } + catch (e) { + this.$ntSetError() + } + finally { + commit('LOADING_USER_POINT', false); + } + }, + async SumUserPointPayment({commit}, payload){ + try{ + commit('LOADING_USER_POINT_PAYMENT', true); + const {data} = await axios.post('admin/score/query/payment',payload) + return data + } + catch (e) { + this.$ntSetError() + } + finally { + commit('LOADING_USER_POINT_PAYMENT', false); + } + } +}; + +const mutations = { + LOADING_DATE_POINT(state, payload) { + state.loadingDatePoint = payload; + }, + LOADING_DATE_REQUEST(state, payload) { + state.loadingDateRequest = payload; + }, + LOADING_CUSTOMER_SINGLE(state, payload) { + state.loadingCustomerSingle = payload; + }, + LOADING_POINT_CASH(state, payload) { + state.loadingPointCash = payload; + }, + LOADING_USER_POINT(state, payload) { + state.loadingUserPoint = payload; + }, + LOADING_USER_POINT_PAYMENT(state, payload) { + state.loadingUserPointPayment = payload; + } +}; + + + +export default { + namespaced: true, + state, + mutations, + actions, +} diff --git a/src/store/price/price.js b/src/store/price/price.js new file mode 100644 index 0000000..a56e1d7 --- /dev/null +++ b/src/store/price/price.js @@ -0,0 +1,85 @@ +import axios from '@/axios' + +const state = { + collectionSingle: undefined, + error: undefined, + loading: false, + users: [], + dataSuccess:undefined, + price:[] +}; +const actions = { + async save({commit}, payload) { + try { + commit('LOADING', true); + if (payload.id) { + await axios({ + method: 'put', + url: 'admin/price/'+payload.id, + data: {...payload} + }) + } else { + await axios({ + method: 'post', + url: 'admin/price', + data: payload + }) + } + + } catch (e) { + console.log('error has') + commit('ERROR', e); + throw e + } finally { + commit('LOADING', false); + } + }, + + async priceId({commit}, id) { + try { + commit('LOADING', true); + let res = await axios.get('admin/price/' + id); + console.log(res.data, 'res-attr'); + commit('PRICE_ID', res.data); + } catch (e) { + commit('ERROR', e); + throw e; + } finally { + commit('LOADING', false); + } + }, + + +}; +const mutations = { + UPDATE_PRICE(state, payload) { + state.priceEdit = state.priceEdit.map(price => { + if (price.id === payload.id) { + return Object.assign({}, price, payload.data) + } + return price + }) + console.log(state.adv, 'users data kole') + }, + + INIT(state, data) { + state.price = data; + }, + + LOADING(state, payload) { + state.loading = payload; + }, + PRICE_ID(state, payload) { + state.collectionSingle = payload; + }, + DATA_SUCCESS(state,payload){ + state.dataSuccess = payload + } +}; + +export default { + namespaced: true, + state, + mutations, + actions +} diff --git a/src/store/product/index.js b/src/store/product/index.js new file mode 100644 index 0000000..2ac822a --- /dev/null +++ b/src/store/product/index.js @@ -0,0 +1,111 @@ +import _ from 'lodash'; +import axios from "@/axios"; + +const state = { + loading: false, + searchQuery: undefined, + page: 1, + count:0, + rows: [] +}; +const mutations = { + ADD_ITEM(state, data) { + state.rows.push(data); + }, + INJECT(state , {rows , keys}){ + state.rows = rows || []; + state.keys = keys || []; + }, + LOADING(state, data) { + state.loading = data; + }, + PAGE_SET(state, data){ + state.page = data; + + }, + SEARCH_QUERY_SET(state, data){ + state.searchQuery = data; + }, + FETCH(state, {rows , count, page}){ + state.rows = rows; + state.count = count || 0; + state.page = page || 1; + }, + EDIT_ROW(state, data) { + if (data.delete) { + state.rows = _.without(state.rows, _.find(state.rows, (item) => item.val == data.row.val)); + } else { + state.rows[data.index] = data.row; + } + } +}; +const actions = { + async init({commit}){ + commit('LOADING', true); + try { + let res = await axios.get('config/statics'); + console.log("res ==> " , res); + commit('INJECT' , res.data); + } catch (e) { + + } finally { + commit('LOADING', false); + } + }, + async removeProduct({commit , dispatch } , {id}){ + commit('LOADING', true); + try { + let res = await axios.delete('product/'+id); + dispatch('product/fetch'); + } catch (e) { + } finally { + commit('LOADING', false); + } + }, + async save({commit ,state}, data) { + commit('LOADING', true); + try { + if(data.id){ + const res = await axios.put(`product/${data.id}` , data); + return res; + }else{ + const res = await axios.post('product/' , data); + return res; + } + } catch (e) { + + } finally { + commit('LOADING', false); + } + }, + async fetch({commit ,state}, data) { + commit('LOADING', true); + try { + let {data} = await axios.get('product' , {params:{page:state.page, text_search:state.searchQuery}}); + commit('FETCH' , data); + } catch (e) { + } finally { + commit('LOADING', false); + } + }, + async activeDeactive({commit ,state}, payload) { + try { + let {data} = await axios.put(`product/variant/${payload.id}` , payload); + } catch (e) { + console.log("e ==> " , e); + } finally { + } + } + + +}; +const getters = {}; + + +export default { + namespaced: true, + state, + mutations, + actions, + getters +} diff --git a/src/store/state.js b/src/store/state.js new file mode 100644 index 0000000..4e86ba4 --- /dev/null +++ b/src/store/state.js @@ -0,0 +1,100 @@ +/*========================================================================================= + File Name: state.js + Description: Vuex Store - state + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + +import navbarSearchAndPinList from '@/layouts/components/navbar/navbarSearchAndPinList' +import themeConfig, { colors } from '@/../themeConfig.js' + +// ///////////////////////////////////////////// +// Helper +// ///////////////////////////////////////////// + +// *From Auth - Data will be received from auth provider +const userDefaults = { + uid : 0, // From Auth + displayName : 'محسن الیادرانی', // From Auth + about : 'Dessert chocolate cake lemon drops jujubes. Biscuit cupcake ice cream bear claw brownie brownie marshmallow.', + photoURL : require('@/assets/images/portrait/small/avatar-s-11.jpg'), // From Auth + status : 'online', + userRole : 'admin' +} + +const userInfoLocalStorage = JSON.parse(localStorage.getItem('userInfo')) || {} + +// Set default values for active-user +// More data can be added by auth provider or other plugins/packages +const getUserInfo = () => { + const userInfo = {} + + // Update property in user + Object.keys(userDefaults).forEach((key) => { + // If property is defined in localStorage => Use that + userInfo[key] = userInfoLocalStorage[key] ? userInfoLocalStorage[key] : userDefaults[key] + }) + + // Include properties from localStorage + Object.keys(userInfoLocalStorage).forEach((key) => { + if (userInfo[key] === undefined && userInfoLocalStorage[key] !== null) userInfo[key] = userInfoLocalStorage[key] + }) + + return userInfo +} + + +// Check if device is touch device +// This is used to remove perfect scrollbar from touch devices +// Using Dynamic components +const is_touch_device = () => { + const prefixes = ' -webkit- -moz- -o- -ms- '.split(' ') + const mq = function (query) { + return window.matchMedia(query).matches + } + + if ('ontouchstart' in window || window.DocumentTouch) { + return true + } + + // include the 'heartz' as a way to have a non matching MQ to help terminate the join + // https://git.io/vznFH + const query = ['(', prefixes.join('touch-enabled),('), 'heartz', ')'].join('') + return mq(query) +} + + +// ///////////////////////////////////////////// +// State +// ///////////////////////////////////////////// + +const state = { + AppActiveUser : getUserInfo(), + bodyOverlay : false, + isVerticalNavMenuActive : true, + is_touch_device : is_touch_device(), + mainLayoutType : themeConfig.mainLayoutType || 'vertical', + navbarSearchAndPinList, + reduceButton : themeConfig.sidebarCollapsed, + verticalNavMenuWidth : 'default', + verticalNavMenuItemsMin : false, + scrollY : 0, + starredPages : navbarSearchAndPinList['pages'].data.filter((page) => page.is_bookmarked), + theme : themeConfig.theme || 'light', + themePrimaryColor : colors.primary, + + // Can be used to get current window with + // Note: Above breakpoint state is for internal use of sidebar & navbar component + windowWidth: null, + collection: {}, + collectionEdit:[], + userEdit:[], + loading: false, + error: undefined, + + +} + +export default state diff --git a/src/store/store.js b/src/store/store.js new file mode 100644 index 0000000..937a8f7 --- /dev/null +++ b/src/store/store.js @@ -0,0 +1,76 @@ +/*========================================================================================= + File Name: store.js + Description: Vuex store + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + + +import Vue from 'vue' +import Vuex from 'vuex' + +import state from './state' +import getters from './getters' +import mutations from './mutations' +import actions from './actions' + +Vue.use(Vuex) + +// import moduleTodo from './todo/moduleTodo.js' +// import moduleCalendar from './calendar/moduleCalendar.js' +// import moduleChat from './chat/moduleChat.js' +// import moduleEmail from './email/moduleEmail.js' +import moduleAuth from './auth/moduleAuth.js' +import moduleECommerce from './eCommerce/moduleECommerce.js' +import moduleConst from './manage/const.js' +import moduleCategory from './category/index' +import moduleVariant from './variant/index' +import variantAdd from './variant/variant' +import moduleProduct from './product/index' +import moduleOrder from './order/index' +import moduleCustomer from './customer/customer' +import collection from './collection/collection' +import user from './user/user' +import blog from './blog/blog' +import adpackage from './adpackage/adpackage' +import shop from './store/shop' +import access from './access/access' +import adv from './advertisng/advertising' +import advModel from './adv/adv' +import badadv from './badadv/badadv' +import points from './point/points' +import transaction from './transaction/transaction' +import price from './price/price' + +export default new Vuex.Store({ + getters, + mutations, + state, + actions, + modules: { + auth: moduleAuth, + const: moduleConst, + category: moduleCategory, + variant: moduleVariant, + product: moduleProduct, + order: moduleOrder, + customer: moduleCustomer , + eCommerce: moduleECommerce, + collection:collection, + user:user, + blog:blog, + adpackage:adpackage, + shop:shop, + access:access, + adv:adv, + badadv:badadv, + points:points, + transaction:transaction, + price:price, + variantAdd:variantAdd, + advModel:advModel + }, + strict: process.env.NODE_ENV !== 'production' +}) diff --git a/src/store/store/shop.js b/src/store/store/shop.js new file mode 100644 index 0000000..161601a --- /dev/null +++ b/src/store/store/shop.js @@ -0,0 +1,113 @@ +import axios from "@/axios"; + +const state = { + loading: false, + storeOneId:undefined, + edit:[] +}; + +const actions = { + async ok({commit}, payload) { + try{ + commit('LOADING', true); + await axios.put('admin/store/'+payload.id,{data:payload,op:'sts'}) + } + catch (e) { + this.$ntSetError() + } + finally { + commit('LOADING', false); + } + }, + + async save({commit}, payload) { + try{ + commit('LOADING', true); + await axios.post('admin/store',{data:payload}) + } + catch (e) { + this.$ntSetError() + } + finally { + commit('LOADING', false); + } + }, + + async get({commit},id) { + try { + commit('LOADING', true); + let res = await axios.get('admin/store/'+id); + console.log(res.data,'res data') + commit('STORE_ID', res.data); + } catch (e) { + console.log(e) + throw e; + } finally { + commit('LOADING', false); + } + }, + + async put({commit}, payload) { + try{ + commit('LOADING', true); + await axios.put('admin/store/'+payload.id, {id:payload.id,data:payload.data,op:'update'}) + commit('UPDATE_STORE', payload); + }catch (e) { + commit('ERROR', e); + } finally { + commit('LOADING', false); + } + }, + + async submitDateLine({commit}, payload) { + try{ + commit('LOADING', true); + const save = await axios.post('admin/store/chart/date',payload) + return save + } + catch (e) { + this.$ntSetError() + } + finally { + commit('LOADING', false); + } + }, + async submitGrowthStore({commit}, payload) { + try{ + commit('LOADING', true); + const growth = await axios.post('admin/store/chart/create',payload) + return growth + } + catch (e) { + this.$ntSetError() + } + finally { + commit('LOADING', false); + } + }, + +}; + +const mutations = { + LOADING(state, payload) { + state.loading = payload; + }, + STORE_ID(state,payload){ + state.storeOneId = payload + }, + UPDATE_STORE(state, payload) { + state.edit = state.edit.map(edit => { + if (edit.id === payload.id) { + return Object.assign({},edit, payload.data) + } + return edit + }) + } +}; + +export default { + namespaced: true, + state, + mutations, + actions, +} diff --git a/src/store/todo/moduleTodo.js b/src/store/todo/moduleTodo.js new file mode 100644 index 0000000..4a34394 --- /dev/null +++ b/src/store/todo/moduleTodo.js @@ -0,0 +1,22 @@ +/*========================================================================================= + File Name: moduleTodo.js + Description: Todo Module + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + + +import state from './moduleTodoState.js' +import mutations from './moduleTodoMutations.js' +import actions from './moduleTodoActions.js' +import getters from './moduleTodoGetters.js' + +export default { + namespaced: true, + state, + mutations, + actions, + getters +} diff --git a/src/store/todo/moduleTodoActions.js b/src/store/todo/moduleTodoActions.js new file mode 100644 index 0000000..b56c427 --- /dev/null +++ b/src/store/todo/moduleTodoActions.js @@ -0,0 +1,59 @@ +/*========================================================================================= + File Name: moduleTodoActions.js + Description: Todo Module Actions + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + +import axios from '@/axios.js' + +export default { + setTodoSearchQuery ({ commit }, query) { + commit('SET_TODO_SEARCH_QUERY', query) + }, + fetchTasks ({ commit }, payload) { + return new Promise((resolve, reject) => { + axios.get('/api/apps/todo/tasks', { params: {filter: payload.filter} }) + .then((response) => { + commit('SET_TASKS', response.data) + resolve(response) + }) + .catch((error) => { reject(error) }) + }) + }, + + fetchTags ({ commit }) { + return new Promise((resolve, reject) => { + axios.get('/api/apps/todo/tags') + .then((response) => { + commit('SET_TAGS', response.data) + resolve(response) + }) + .catch((error) => { reject(error) }) + }) + }, + + addTask ({ commit }, task) { + return new Promise((resolve, reject) => { + axios.post('/api/apps/todo/tasks/', {task}) + .then((response) => { + commit('ADD_TASK', Object.assign(task, {id: response.data.id})) + resolve(response) + }) + .catch((error) => { reject(error) }) + }) + }, + + updateTask ({ commit }, task) { + return new Promise((resolve, reject) => { + axios.post(`/api/apps/todo/task/${task.id}`, {task}) + .then((response) => { + commit('UPDATE_TASK', response.data) + resolve(response) + }) + .catch((error) => { reject(error) }) + }) + } +} diff --git a/src/store/todo/moduleTodoGetters.js b/src/store/todo/moduleTodoGetters.js new file mode 100644 index 0000000..f4f5622 --- /dev/null +++ b/src/store/todo/moduleTodoGetters.js @@ -0,0 +1,29 @@ +/*========================================================================================= + File Name: moduleTodoGetters.js + Description: Todo Module Getters + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + + +export default { + queriedTasks: state => state.tasks.filter((task) => { + let isItemOfCurrentFilter = false + + if ( + (state.todoFilter === 'all' && !task.isTrashed) + || (state.todoFilter === 'important' && !task.isTrashed && task.isImportant) + || (state.todoFilter === 'starred' && !task.isTrashed && task.isStarred) + || (state.todoFilter === 'completed' && !task.isTrashed && task.isCompleted) + || (state.todoFilter === 'trashed' && task.isTrashed) + || (task.tags.includes(state.todoFilter)) + + ) { isItemOfCurrentFilter = true } + + return isItemOfCurrentFilter && (task.title.toLowerCase().includes(state.todoSearchQuery.toLowerCase()) || task.desc.toLowerCase().includes(state.todoSearchQuery.toLowerCase())) + }), + getTask: state => taskId => state.tasks.find((task) => task.id === taskId) + // getTodosBySection: state => (sectionId) => state.todoArray.filter((task) => task.sectionId == sectionId), +} diff --git a/src/store/todo/moduleTodoMutations.js b/src/store/todo/moduleTodoMutations.js new file mode 100644 index 0000000..868754b --- /dev/null +++ b/src/store/todo/moduleTodoMutations.js @@ -0,0 +1,33 @@ +/*========================================================================================= + File Name: moduleTodoMutations.js + Description: Todo Module Mutations + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + + +export default { + SET_TODO_SEARCH_QUERY (state, query) { + state.todoSearchQuery = query + }, + UPDATE_TODO_FILTER (state, filter) { + state.todoFilter = filter + }, + + // API + SET_TASKS (state, tasks) { + state.tasks = tasks + }, + SET_TAGS (state, tags) { + state.taskTags = tags + }, + ADD_TASK (state, task) { + state.tasks.unshift(task) + }, + UPDATE_TASK (state, task) { + const taskIndex = state.tasks.findIndex((t) => t.id === task.id) + Object.assign(state.tasks[taskIndex], task) + } +} diff --git a/src/store/todo/moduleTodoState.js b/src/store/todo/moduleTodoState.js new file mode 100644 index 0000000..3959bc0 --- /dev/null +++ b/src/store/todo/moduleTodoState.js @@ -0,0 +1,16 @@ +/*========================================================================================= + File Name: moduleTodoState.js + Description: Todo Module State + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + + +export default { + tasks: [], + taskTags: [], + todoSearchQuery: '', + todoFilter: null +} diff --git a/src/store/transaction/transaction.js b/src/store/transaction/transaction.js new file mode 100644 index 0000000..7bd456b --- /dev/null +++ b/src/store/transaction/transaction.js @@ -0,0 +1,167 @@ +import axios from '@/axios' + + +const state = { + loadingDepositPercentages:false, + loadingDepositAmount:false, + loadingDepositAmountIp:false, + loadingDepositAmountCity:false, + loadingDepositAmountIpCity:false, + loadingDepositAmountAdv:false, + loadingDepositAmountCa:false, + loadingDepositAmountIpCollection:false, + loadingDepositAmountSort:false, + loadingDepositAmountReturned:false, +}; +const actions = { + async DepositPercentages({commit}, payload) { + try { + commit('LOADING_Deposit_Percentages', true); + const {data} = await axios.post('admin/transaction/query/charity',payload); + return data; + } catch (e) { + throw e; + } finally { + commit('LOADING_Deposit_Percentages', false); + } + }, + async DepositAmount({commit}, payload) { + try { + commit('LOADING_Deposit_Amount', true); + const {data} = await axios.post('admin/transaction/query/charity/date',payload); + return data; + } catch (e) { + throw e; + } finally { + commit('LOADING_Deposit_Amount', false); + } + }, + async DepositAmountIp({commit}, payload) { + try { + commit('LOADING_Deposit_Amount_IP', true); + const {data} = await axios.post('admin/transaction/query/charity/all',payload); + return data; + } catch (e) { + throw e; + } finally { + commit('LOADING_Deposit_Amount_IP', false); + } + }, + async DepositAmountCity({commit}, payload) { + try { + commit('LOADING_Deposit_Amount_CITY', true); + const {data} = await axios.post('admin/transaction/chart/city',payload); + return data; + } catch (e) { + throw e; + } finally { + commit('LOADING_Deposit_Amount_CITY', false); + } + }, + async DepositAmountIpCity({commit}, payload) { + try { + commit('LOADING_Deposit_Amount_IP_CITY', true); + const {data} = await axios.post('admin/transaction/chart/ip/city',payload); + return data; + } catch (e) { + throw e; + } finally { + commit('LOADING_Deposit_Amount_IP_CITY', false); + } + }, + async DepositAmountAdv({commit}, payload) { + try { + commit('LOADING_Deposit_Amount_ADV', true); + const {data} = await axios.post('admin/transaction/chart/adv',payload); + return data; + } catch (e) { + throw e; + } finally { + commit('LOADING_Deposit_Amount_ADV', false); + } + }, + async DepositAmountCa({commit}, payload) { + try { + commit('LOADING_Deposit_Amount_CA', true); + const {data} = await axios.post('admin/transaction/chart/ip/ca',payload); + return data; + } catch (e) { + throw e; + } finally { + commit('LOADING_Deposit_Amount_CA', false); + } + }, + async DepositAmountIpCollection({commit}, payload) { + try { + commit('LOADING_Deposit_Amount_IP_COLLECTION', true); + const {data} = await axios.post('admin/transaction/chart/ip/collection',payload); + return data; + } catch (e) { + throw e; + } finally { + commit('LOADING_Deposit_Amount_IP_COLLECTION', false); + } + }, + async DepositAmountSort({commit}, payload) { + try { + commit('LOADING_Deposit_Amount_SORT', true); + const {data} = await axios.post('admin/transaction/ip/payment',payload); + return data; + } catch (e) { + throw e; + } finally { + commit('LOADING_Deposit_Amount_SORT', false); + } + }, + async DepositAmountReturned({commit}, payload) { + try { + commit('LOADING_Deposit_Amount_RETUNED', true); + const {data} = await axios.post('admin/transaction/ip/refund',payload); + return data; + } catch (e) { + throw e; + } finally { + commit('LOADING_Deposit_Amount_RETUNED', false); + } + }, + +}; +const mutations = { + LOADING_Deposit_Percentages(state,payload){ + state.loadingDepositPercentages = payload; + }, + LOADING_Deposit_Amount(state,payload){ + state.loadingDepositAmount = payload; + }, + LOADING_Deposit_Amount_IP(state,payload){ + state.loadingDepositAmountIp = payload; + }, + LOADING_Deposit_Amount_CITY(state,payload){ + state.loadingDepositAmountCity = payload; + }, + LOADING_Deposit_Amount_IP_CITY(state,payload){ + state.loadingDepositAmountIpCity = payload; + }, + LOADING_Deposit_Amount_ADV(state,payload){ + state.loadingDepositAmountAdv = payload; + }, + LOADING_Deposit_Amount_CA(state,payload){ + state.loadingDepositAmountCa = payload; + }, + LOADING_Deposit_Amount_IP_COLLECTION(state,payload){ + state.loadingDepositAmountIpCollection = payload; + }, + LOADING_Deposit_Amount_SORT(state,payload){ + state.loadingDepositAmountSort = payload; + }, + LOADING_Deposit_Amount_RETUNED(state,payload){ + state.loadingDepositAmountReturned = payload; + }, +}; + +export default { + namespaced: true, + state, + mutations, + actions +} diff --git a/src/store/user-management/moduleUserManagement.js b/src/store/user-management/moduleUserManagement.js new file mode 100644 index 0000000..dc2b92c --- /dev/null +++ b/src/store/user-management/moduleUserManagement.js @@ -0,0 +1,24 @@ +/*========================================================================================= + File Name: moduleUserManagement.js + Description: Calendar Module + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + + +import state from './moduleUserManagementState.js' +import mutations from './moduleUserManagementMutations.js' +import actions from './moduleUserManagementActions.js' +import getters from './moduleUserManagementGetters.js' + +export default { + isRegistered: false, + namespaced: true, + state, + mutations, + actions, + getters +} + diff --git a/src/store/user-management/moduleUserManagementActions.js b/src/store/user-management/moduleUserManagementActions.js new file mode 100644 index 0000000..6f765db --- /dev/null +++ b/src/store/user-management/moduleUserManagementActions.js @@ -0,0 +1,52 @@ +/*========================================================================================= + File Name: moduleCalendarActions.js + Description: Calendar Module Actions + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + +import axios from '@/axios.js' + +export default { + // addItem({ commit }, item) { + // return new Promise((resolve, reject) => { + // axios.post("/api/data-list/products/", {item: item}) + // .then((response) => { + // commit('ADD_ITEM', Object.assign(item, {id: response.data.id})) + // resolve(response) + // }) + // .catch((error) => { reject(error) }) + // }) + // }, + fetchUsers ({ commit }) { + return new Promise((resolve, reject) => { + axios.get('/api/user-management/users') + .then((response) => { + commit('SET_USERS', response.data) + resolve(response) + }) + .catch((error) => { reject(error) }) + }) + }, + fetchUser (context, userId) { + return new Promise((resolve, reject) => { + axios.get(`/api/user-management/users/${userId}`) + .then((response) => { + resolve(response) + }) + .catch((error) => { reject(error) }) + }) + }, + removeRecord ({ commit }, userId) { + return new Promise((resolve, reject) => { + axios.delete(`/api/user-management/users/${userId}`) + .then((response) => { + commit('REMOVE_RECORD', userId) + resolve(response) + }) + .catch((error) => { reject(error) }) + }) + } +} diff --git a/src/store/user-management/moduleUserManagementGetters.js b/src/store/user-management/moduleUserManagementGetters.js new file mode 100644 index 0000000..cd4af66 --- /dev/null +++ b/src/store/user-management/moduleUserManagementGetters.js @@ -0,0 +1,11 @@ +/*========================================================================================= + File Name: moduleCalendarGetters.js + Description: Calendar Module Getters + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + + +export default {} diff --git a/src/store/user-management/moduleUserManagementMutations.js b/src/store/user-management/moduleUserManagementMutations.js new file mode 100644 index 0000000..9531039 --- /dev/null +++ b/src/store/user-management/moduleUserManagementMutations.js @@ -0,0 +1,19 @@ +/*========================================================================================= + File Name: moduleCalendarMutations.js + Description: Calendar Module Mutations + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + + +export default { + SET_USERS (state, users) { + state.users = users + }, + REMOVE_RECORD (state, itemId) { + const userIndex = state.users.findIndex((u) => u.id === itemId) + state.users.splice(userIndex, 1) + } +} diff --git a/src/store/user-management/moduleUserManagementState.js b/src/store/user-management/moduleUserManagementState.js new file mode 100644 index 0000000..5fd3c5c --- /dev/null +++ b/src/store/user-management/moduleUserManagementState.js @@ -0,0 +1,12 @@ +/*========================================================================================= + File Name: moduleCalendarState.js + Description: Calendar Module State + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + +export default { + users: [] +} diff --git a/src/store/user/user.js b/src/store/user/user.js new file mode 100644 index 0000000..a984801 --- /dev/null +++ b/src/store/user/user.js @@ -0,0 +1,284 @@ +import axios from '@/axios' + +const state = { + users: [], + error: undefined, + loading:false, + loadingWithUser:false, + loadingWithUserPeak:false, + loadingAvgSupervisionUser:false, + loadingChartPeak:false, + loadingDeterminationAvg:false, + loadingSingleUser:false, + loadingVisionDateUser:false, + loadingChartSingleUser:false, + loadingChartAvgCustomer:false, + loadingChartCountSuperVision:false, + loadingSortUser:false, + userEdit:[], + userList:[], + getDataSuccess:undefined, + collection:{}, + deleteItem:false +}; +const actions = { + async SubmitUser({commit}, payload) { + + try { + commit('LOADING', true); + + if(payload.id){ + await axios({ + method: 'put', + url: 'admin/user/'+payload.id, + data: {id:payload.id,data:payload.data,op:'update'} + }) + }else{ + await axios({ + method: 'post', + url: 'admin/user', + data: {data:payload} + }) + } + + } catch (e) { + commit('ERROR', e); + throw e + } finally { + commit('LOADING', false); + } + + }, + async UserId({commit},id) { + try { + commit('LOADING', true); + let res = await axios.get('admin/user/user/'+id); + console.log(res.data,'res-collection') + commit('USERS_ID', res.data); + } catch (e) { + commit('ERROR', e); + throw e; + } finally { + commit('LOADING', false); + } + }, + async editUsers({commit}, payload) { + try{ + commit('LOADING', true); + await axios({ + method: 'put', + url: 'admin/user/'+payload.id, + data: {id:payload.id,data:payload.data,op:'update'} + }).then((res)=>{ + commit('SUCCESS_DATA',res.data); + commit('UPDATE_USERS', payload); + }) + + }catch (e) { + commit('ERROR', e); + throw e + } finally { + commit('LOADING', false); + } + + }, + async avgWithUser({commit}, payload) { + try { + commit('LOADING_WITH_USER', true); + const {data} = await axios.post('admin/user/query/avg',payload); + return data; + } catch (e) { + throw e; + } finally { + commit('LOADING_WITH_USER', false); + } + }, + async peakWithUser({commit}, payload) { + try { + commit('LOADING_WITH_USER_PEAK', true); + const {data} = await axios.post('admin/user/query/peak',payload); + return data; + } catch (e) { + throw e; + } finally { + commit('LOADING_WITH_USER_PEAK', false); + } + }, + async avgSupervisionUser({commit}, payload) { + try { + commit('LOADING_AVG_SUPER_VISION_USER', true); + const {data} = await axios.post('admin/user/query/users',payload); + return data; + } catch (e) { + throw e; + } finally { + commit('LOADING_AVG_SUPER_VISION_USER', false); + } + }, + async DeterminationPeak({commit}, payload) { + try { + commit('LOADING_CHART_PEAK', true); + const {data} = await axios.post('admin/user/chart/peak',payload); + return data; + } catch (e) { + throw e; + } finally { + commit('LOADING_CHART_PEAK', false); + } + }, + async DeterminationAvg({commit}, payload) { + try { + commit('LOADING_Determination_AVG', true); + const {data} = await axios.post('admin/user/chart/avg',payload); + return data; + } catch (e) { + throw e; + } finally { + commit('LOADING_Determination_AVG', false); + } + }, + async singleUser({commit}, payload) { + try { + commit('LOADING_SINGLE_USER', true); + const {data} = await axios.post('admin/user/chart/adv',payload); + return data; + } catch (e) { + throw e; + } finally { + commit('LOADING_SINGLE_USER', false); + } + }, + async superVisionDateUser({commit}, payload) { + try { + commit('LOADING_VISION_DATE_USER', true); + const {data} = await axios.post('admin/user/chart/count',payload); + return data; + } catch (e) { + throw e; + } finally { + commit('LOADING_VISION_DATE_USER', false); + } + }, + async chartSingleUser({commit}, payload) { + try { + commit('LOADING_CHART_SINGLE_USER', true); + const {data} = await axios.post('admin/user/chart/user',payload); + return data; + } catch (e) { + throw e; + } finally { + commit('LOADING_CHART_SINGLE_USER', false); + } + }, + async chartCountSuperVision({commit}, payload) { + try { + commit('LOADING_CHART_SUPER_VISION', true); + const {data} = await axios.post('admin/user/chart/date',payload); + return data; + } catch (e) { + throw e; + } finally { + commit('LOADING_CHART_SUPER_VISION', false); + } + }, + async avgCustomers({commit}, payload) { + try { + commit('LOADING_CHART_AVG_CUSTOMER', true); + const {data} = await axios.post('admin/user/chart/customer',payload); + return data; + } catch (e) { + throw e; + } finally { + commit('LOADING_CHART_AVG_CUSTOMER', false); + } + }, + async SortUser({commit}, payload) { + try { + commit('LOADING_SORT_USER', true); + const {data} = await axios.post('admin/user/query/collection',payload); + return data; + } catch (e) { + throw e; + } finally { + commit('LOADING_SORT_USER', false); + } + }, + async deleteUser({commit},payload) { + try { + commit('LOADING_DELETE', true); + console.log(payload,'id'); + const {data} = await axios.delete('admin/user/'+ payload); + return data; + } catch (e) { + throw e; + } finally { + commit('LOADING_DELETE', false); + } + } + +}; +const mutations = { + INIT(state, data) { + state.collection = data; + }, + LOADING(state,payload){ + state.loading = payload; + }, + LOADING_WITH_USER(state,payload){ + state.loadingWithUser = payload; + }, + LOADING_WITH_USER_PEAK(state,payload){ + state.loadingWithUserPeak = payload; + }, + LOADING_AVG_SUPER_VISION_USER(state,payload){ + state.loadingAvgSupervisionUser = payload; + }, + LOADING_CHART_PEAK(state,payload){ + state.loadingChartPeak = payload; + }, + LOADING_Determination_AVG(state,payload){ + state.loadingDeterminationAvg = payload; + }, + LOADING_SINGLE_USER(state,payload){ + state.loadingSingleUser = payload; + }, + LOADING_VISION_DATE_USER(state,payload){ + state.loadingVisionDateUser = payload; + }, + LOADING_CHART_SINGLE_USER(state,payload){ + state.loadingChartSingleUser = payload; + }, + LOADING_CHART_AVG_CUSTOMER(state,payload){ + state.loadingChartAvgCustomer = payload; + }, + LOADING_CHART_SUPER_VISION(state,payload){ + state.loadingChartCountSuperVision = payload; + }, + LOADING_SORT_USER(state,payload){ + state.loadingSortUser = payload; + }, + USERS_ID(state,payload){ + state.users = payload; + }, + SUCCESS_DATA(state, payload) { + state.getDataSuccess = payload; + }, + LOADING_DELETE(state, payload) { + state.deleteItem = payload; + }, + UPDATE_USERS(state, payload) { + state.userEdit = state.userEdit.map(user => { + if (user.id === payload.id) { + return Object.assign({},user, payload.data) + } + return user + }) + } +}; + +export default { + namespaced: true, + state, + mutations, + actions +} diff --git a/src/store/variant/index.js b/src/store/variant/index.js new file mode 100644 index 0000000..00c3929 --- /dev/null +++ b/src/store/variant/index.js @@ -0,0 +1,110 @@ +import _ from 'lodash'; +import axios from "@/axios"; + +const state = { + loading: false, + getId:undefined, + rows: [ + {id: 1, key: 'ut', val: 'نوع اول'} + ] +}; +const mutations = { + ADD_ITEM(state, data) { + state.rows.push(data); + }, + INJECT(state, {rows, keys}) { + state.rows = rows || []; + state.keys = keys || []; + }, + LOADING(state, data) { + state.loading = data; + }, + GET_ONE_BY_ID(state, data) { + state.getId = data; + }, + EDIT_ROW(state, data) { + if (data.delete) { + state.rows = _.without(state.rows, _.find(state.rows, (item) => item.val == data.row.val)); + } else { + state.rows[data.index] = data.row; + } + }, +}; +const actions = { + async init({commit}) { + commit('LOADING', true); + try { + let res = await axios.get('config/statics'); + commit('INJECT', res.data); + } catch (e) { + + } finally { + commit('LOADING', false); + } + }, + async save({commit, state}, data) { + commit('LOADING', true); + try { + if (data.id) { + const res = await axios.put(`product/variant/${data.id}`, data); + } else { + const res = await axios.post('product/variant', data); + } + } catch (e) { + throw e; + } finally { + commit('LOADING', false); + } + }, + async submitGroup({commit}, payload) { + commit('LOADING', true); + try { + await axios.post('admin/group', {data:payload}); + } catch (e) { + throw e; + } finally { + commit('LOADING', false); + } + }, + async editGroup({commit}, payload) { + commit('LOADING', true); + try { + await axios.put('admin/group/'+payload.id,{id:payload.id,data:payload.data}); + } catch (e) { + throw e; + } finally { + commit('LOADING', false); + } + }, + async deleteItem({commit}, id) { + try { + commit('LOADING', true); + await axios.delete('admin/group/'+id) + } catch (e) { + throw e; + } finally { + commit('LOADING', false); + } + }, + async getOneById({commit},id) { + try { + commit('LOADING', true); + const {data} = await axios.get('admin/group/' + id ); + commit('GET_ONE_BY_ID',data); + } catch (e) { + + } finally { + commit('LOADING', false); + } + } +}; +const getters = {}; + + +export default { + namespaced: true, + state, + mutations, + actions, + getters +} diff --git a/src/store/variant/variant.js b/src/store/variant/variant.js new file mode 100644 index 0000000..24d04e6 --- /dev/null +++ b/src/store/variant/variant.js @@ -0,0 +1,91 @@ +import axios from '@/axios' + +const state = { + collectionSingle: undefined, + error: undefined, + loading: false, + users: [] +}; +const actions = { + async save({commit}, payload) { + try { + commit('LOADING', true); + if (payload.id) { + await axios({ + method: 'put', + url: `admin/attribute/${payload.id}`, + data: payload + }) + } else { + const {data} = await axios({ + method: 'post', + url: 'admin/attribute', + data: {data:payload} + }) + return data + } + } catch (e) { + console.log('error has') + commit('ERROR', e); + throw e + } finally { + commit('LOADING', false); + } + }, + + async variantId({commit}, id) { + try { + commit('LOADING', true); + let res = await axios.get('admin/attribute/' + id); + console.log(res.data, 'res-attr') + commit('VARIANT_ID', res.data); + } catch (e) { + commit('ERROR', e); + throw e; + } finally { + commit('LOADING', false); + } + }, + + +}; +const mutations = { + UPDATE_VARIANT(state, payload) { + state.variantEdit = state.variantEdit.map(variant => { + if (variant.id === payload.id) { + return Object.assign({}, variant, payload.data) + } + return variant + }) + console.log(state.variant, 'users data kole') + }, + + LOADING(state, payload) { + state.loading = payload; + }, + VARIANT_ID(state, payload) { + state.collectionSingle = payload; + }, + DELETE_ROW(state, payload) { + state.collectionSingle.values.splice(payload,1) + }, + SET_ROW_SOUND(state,payload){ + if (!payload.id) { + state.collectionSingle.values.push(payload.title); + } else { + const ind = state.collectionSingle.values.indexOf(state.collectionSingle.values.find((item) => item.id == payload.id)); + if (ind > -1) { + state.collectionSingle.values[ind] = Object.assign({}, payload) + } + } + }, + + +}; + +export default { + namespaced: true, + state, + mutations, + actions +} diff --git a/src/table/bag.js b/src/table/bag.js new file mode 100644 index 0000000..66d1a0e --- /dev/null +++ b/src/table/bag.js @@ -0,0 +1,16 @@ +import ColCreator from "./index"; + +class Table { + cols = [ + new ColCreator('bag_name', 'نام کیفی').export(), + new ColCreator('cat', 'تاریخ سفارش ').export(), + new ColCreator('w', 'جمع وزنی').export(), + new ColCreator('price', 'جمع ریالی').export(), + new ColCreator('customer', 'نام مشتری').export(), + new ColCreator('when', 'زمان تحویل').export(), + new ColCreator('sts', 'وضعیت').export(), + new ColCreator('action', 'عملیات').renderSlot('op').export(), + ]; +} + +export default new Table().cols; diff --git a/src/table/category.js b/src/table/category.js new file mode 100644 index 0000000..91c8906 --- /dev/null +++ b/src/table/category.js @@ -0,0 +1,10 @@ +import ColCreator from "./index"; + +class Table { + cols = [ + new ColCreator('title', 'عنوان').export(), + new ColCreator('action', 'عملیات').renderSlot('op').export(), + ]; +} + +export default new Table().cols; diff --git a/src/table/customer.js b/src/table/customer.js new file mode 100644 index 0000000..07789c4 --- /dev/null +++ b/src/table/customer.js @@ -0,0 +1,16 @@ +import ColCreator from "./index"; + +class Table { + cols = [ + new ColCreator('user_id.fname', 'نام').renderSlot('name').export(), + new ColCreator('user_id.lname', 'نام خانوادگی').export(), + new ColCreator('account_code', 'کد مشتری').export(), + new ColCreator('user_id.phone', 'تلفن همراه').export(), + new ColCreator('national_code', 'کد ملی').export(), + new ColCreator('city', 'نوع مشتری').switchFilter().export(), + new ColCreator('rial_credit', 'اعتبار ریالی').export(), + new ColCreator('action', 'عملیات').renderSlot('op').export(), + ]; +} + +export default new Table().cols; diff --git a/src/table/debit.js b/src/table/debit.js new file mode 100644 index 0000000..021294d --- /dev/null +++ b/src/table/debit.js @@ -0,0 +1,16 @@ +import ColCreator from "./index"; + +class Table { + cols = [ + new ColCreator('cat', 'شناسه').export(), + new ColCreator('name', 'نام ').export(), + new ColCreator('bag_name', 'کیفی').export(), + new ColCreator('phone', 'تلفن تماس').export(), + new ColCreator('last_order', 'آخرین سفارش').export(), + new ColCreator('gold', 'مانده طلایی').renderSlot('gold').export(), + new ColCreator('rial', 'مانده ریالی').renderSlot('rial').export(), + new ColCreator('action', 'عملیات').renderSlot('op').export(), + ]; +} + +export default new Table().cols; diff --git a/src/table/fee.js b/src/table/fee.js new file mode 100644 index 0000000..b06a583 --- /dev/null +++ b/src/table/fee.js @@ -0,0 +1,18 @@ +import ColCreator from "./index"; + +class Table { + cols = [ + new ColCreator('cat', 'تاریخ ثبت').export(), + new ColCreator('from', 'از تاریخ').export(), + new ColCreator('to', 'تا تاریخ').export(), + new ColCreator('when', 'تاریخ پرداخت').export(), + new ColCreator('from_name', 'نام بدهکار').export(), + new ColCreator('to_name', 'بستانکار').export(), + new ColCreator('sts', 'نتیجه').export(), + new ColCreator('sts_f', 'وضعیت پرداخت').export(), + new ColCreator('block', 'مسدود').renderSlot('block').export(), + new ColCreator('action', 'عملیات').renderSlot('op').export(), + ]; +} + +export default new Table().cols; diff --git a/src/table/index.js b/src/table/index.js new file mode 100644 index 0000000..d6d939b --- /dev/null +++ b/src/table/index.js @@ -0,0 +1,48 @@ +export default class ColCreator { + + filter; + + constructor(key, title) { + this.key = key; + this.title = title; + } + + export() { + let exp = {}; + exp['key'] = this.key; + exp['dataIndex'] = this.key; + exp['title'] = this.title; + if (this._slots) { + exp['scopedSlots'] = this._slots; + } + + if(this.filter){ + exp['filter'] = this.filterType; + } + return exp; + } + + + keyCol(key){ + this.key = key; + return this; + } + + + renderSlot(name) { + this._slots = { + customRender: name + }; + return this; + } + + + + switchFilter(){ + this.filter = true; + this.filterType = 'switch'; + return this; + } + +} + diff --git a/src/table/logs.js b/src/table/logs.js new file mode 100644 index 0000000..a5bec4f --- /dev/null +++ b/src/table/logs.js @@ -0,0 +1,11 @@ +import ColCreator from "./index"; + +class Table { + cols = [ + new ColCreator('cat', 'تاریخ').export(), + new ColCreator('user', 'کاربر').export(), + new ColCreator('title', 'عملیات').export(), + ]; +} + +export default new Table().cols; diff --git a/src/table/order.js b/src/table/order.js new file mode 100644 index 0000000..5685957 --- /dev/null +++ b/src/table/order.js @@ -0,0 +1,27 @@ +import ColCreator from "./index"; + +class Table { + cols = [ + new ColCreator('id', 'شماره سفارش ').renderSlot('id').export(), + new ColCreator('total_price', 'مبلغ').export(), + new ColCreator('phone', 'شماره تلفن').export(), + new ColCreator('app', 'پلتفرم').export(), + new ColCreator('sts_str', 'وضعیت').export(), + new ColCreator('profile.user_id.lname', 'مشتری').export(), + new ColCreator('action', 'عملیات').renderSlot('op').export(), + ]; +} + +export class TableInner { + cols = [ + new ColCreator('id', 'کدمحصول').renderSlot('id').export(), + new ColCreator('name', 'نام محصول').export(), + new ColCreator('total', 'تعداد فروش رفته').export(), + new ColCreator('w', 'وزن فروش رفته').export(), + new ColCreator('price', 'جمع فروش رفته').export(), + new ColCreator('creator', 'سازنده').export(), + new ColCreator('supplier', 'تامین کننده').export(), + ]; +} + +export default new Table().cols; diff --git a/src/table/personelPerMonth.js b/src/table/personelPerMonth.js new file mode 100644 index 0000000..edce7d9 --- /dev/null +++ b/src/table/personelPerMonth.js @@ -0,0 +1,11 @@ +import ColCreator from "./index"; + +class Table { + cols = [ + new ColCreator('id', 'شماره شناسایی').export(), + new ColCreator('name', 'نام').export(), + new ColCreator('insurance_sts_str', 'وضعیت بیمه').export(), + ]; +} + +export default new Table().cols; diff --git a/src/table/product.js b/src/table/product.js new file mode 100644 index 0000000..9ebc59b --- /dev/null +++ b/src/table/product.js @@ -0,0 +1,12 @@ +import ColCreator from "./index"; + +class Table { + cols = [ + new ColCreator('id', 'کد').export(), + new ColCreator('title', 'نام محصول').export(), + new ColCreator('product_code', 'کد محصول ').export(), + new ColCreator('action', 'عملیات').renderSlot('op').export(), + ]; +} + +export default new Table().cols; diff --git a/src/vendor/Export2Excel.js b/src/vendor/Export2Excel.js new file mode 100644 index 0000000..20784f3 --- /dev/null +++ b/src/vendor/Export2Excel.js @@ -0,0 +1,220 @@ +/* eslint-disable */ +require('script-loader!file-saver'); +import XLSX from 'xlsx' + +function generateArray(table) { + var out = []; + var rows = table.querySelectorAll('tr'); + var ranges = []; + for (var R = 0; R < rows.length; ++R) { + var outRow = []; + var row = rows[R]; + var columns = row.querySelectorAll('td'); + for (var C = 0; C < columns.length; ++C) { + var cell = columns[C]; + var colspan = cell.getAttribute('colspan'); + var rowspan = cell.getAttribute('rowspan'); + var cellValue = cell.innerText; + if (cellValue !== "" && cellValue == +cellValue) cellValue = +cellValue; + + //Skip ranges + ranges.forEach(function (range) { + if (R >= range.s.r && R <= range.e.r && outRow.length >= range.s.c && outRow.length <= range.e.c) { + for (var i = 0; i <= range.e.c - range.s.c; ++i) outRow.push(null); + } + }); + + //Handle Row Span + if (rowspan || colspan) { + rowspan = rowspan || 1; + colspan = colspan || 1; + ranges.push({ + s: { + r: R, + c: outRow.length + }, + e: { + r: R + rowspan - 1, + c: outRow.length + colspan - 1 + } + }); + }; + + //Handle Value + outRow.push(cellValue !== "" ? cellValue : null); + + //Handle Colspan + if (colspan) + for (var k = 0; k < colspan - 1; ++k) outRow.push(null); + } + out.push(outRow); + } + return [out, ranges]; +}; + +function datenum(v, date1904) { + if (date1904) v += 1462; + var epoch = Date.parse(v); + return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000); +} + +function sheet_from_array_of_arrays(data, opts) { + var ws = {}; + var range = { + s: { + c: 10000000, + r: 10000000 + }, + e: { + c: 0, + r: 0 + } + }; + for (var R = 0; R != data.length; ++R) { + for (var C = 0; C != data[R].length; ++C) { + if (range.s.r > R) range.s.r = R; + if (range.s.c > C) range.s.c = C; + if (range.e.r < R) range.e.r = R; + if (range.e.c < C) range.e.c = C; + var cell = { + v: data[R][C] + }; + if (cell.v == null) continue; + var cell_ref = XLSX.utils.encode_cell({ + c: C, + r: R + }); + + if (typeof cell.v === 'number') cell.t = 'n'; + else if (typeof cell.v === 'boolean') cell.t = 'b'; + else if (cell.v instanceof Date) { + cell.t = 'n'; + cell.z = XLSX.SSF._table[14]; + cell.v = datenum(cell.v); + } else cell.t = 's'; + + ws[cell_ref] = cell; + } + } + if (range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range); + return ws; +} + +function Workbook() { + if (!(this instanceof Workbook)) return new Workbook(); + this.SheetNames = []; + this.Sheets = {}; +} + +function s2ab(s) { + var buf = new ArrayBuffer(s.length); + var view = new Uint8Array(buf); + for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF; + return buf; +} + +export function export_table_to_excel(id) { + var theTable = document.getElementById(id); + var oo = generateArray(theTable); + var ranges = oo[1]; + + /* original data */ + var data = oo[0]; + var ws_name = "SheetJS"; + + var wb = new Workbook(), + ws = sheet_from_array_of_arrays(data); + + /* add ranges to worksheet */ + // ws['!cols'] = ['apple', 'banan']; + ws['!merges'] = ranges; + + /* add worksheet to workbook */ + wb.SheetNames.push(ws_name); + wb.Sheets[ws_name] = ws; + + var wbout = XLSX.write(wb, { + bookType: 'xlsx', + bookSST: false, + type: 'binary' + }); + + saveAs(new Blob([s2ab(wbout)], { + type: "application/octet-stream" + }), "test.xlsx") +} + +export function export_json_to_excel({ + multiHeader = [], + header, + data, + filename, + merges = [], + autoWidth = true, + bookType= 'xlsx' +} = {}) { + /* original data */ + filename = filename || 'excel-list' + data = [...data] + data.unshift(header); + + for (let i = multiHeader.length-1; i > -1; i--) { + data.unshift(multiHeader[i]) + } + + var ws_name = "SheetJS"; + var wb = new Workbook(), + ws = sheet_from_array_of_arrays(data); + + if (merges.length > 0) { + if (!ws['!merges']) ws['!merges'] = []; + merges.forEach(item => { + ws['!merges'].push(XLSX.utils.decode_range(item)) + }) + } + + if (autoWidth) { + /*设置worksheet每列的最大宽度*/ + const colWidth = data.map(row => row.map(val => { + /*先判断是否为null/undefined*/ + if (val == null) { + return { + 'wch': 10 + }; + } + /*再判断是否为中文*/ + else if (val.toString().charCodeAt(0) > 255) { + return { + 'wch': val.toString().length * 2 + }; + } else { + return { + 'wch': val.toString().length + }; + } + })) + /*以第一行为初始值*/ + let result = colWidth[0]; + for (let i = 1; i < colWidth.length; i++) { + for (let j = 0; j < colWidth[i].length; j++) { + if (result[j]['wch'] < colWidth[i][j]['wch']) { + result[j]['wch'] = colWidth[i][j]['wch']; + } + } + } + ws['!cols'] = result; + } + + /* add worksheet to workbook */ + wb.SheetNames.push(ws_name); + wb.Sheets[ws_name] = ws; + + var wbout = XLSX.write(wb, { + bookType: bookType, + bookSST: false, + type: 'binary' + }); + saveAs(new Blob([s2ab(wbout)], { + type: "application/octet-stream" + }), `${filename}.${bookType}`); +} diff --git a/src/views/Callback.vue b/src/views/Callback.vue new file mode 100644 index 0000000..dae25a2 --- /dev/null +++ b/src/views/Callback.vue @@ -0,0 +1,40 @@ + + + + + diff --git a/src/views/DashboardAnalytics.vue b/src/views/DashboardAnalytics.vue new file mode 100644 index 0000000..56a45b8 --- /dev/null +++ b/src/views/DashboardAnalytics.vue @@ -0,0 +1,122 @@ + + + + + + + diff --git a/src/views/DashboardECommerce.vue b/src/views/DashboardECommerce.vue new file mode 100644 index 0000000..55d26de --- /dev/null +++ b/src/views/DashboardECommerce.vue @@ -0,0 +1,315 @@ + + + + + + + diff --git a/src/views/Inp.vue b/src/views/Inp.vue new file mode 100644 index 0000000..3702962 --- /dev/null +++ b/src/views/Inp.vue @@ -0,0 +1,23 @@ + + + + + diff --git a/src/views/TestTable.vue b/src/views/TestTable.vue new file mode 100644 index 0000000..47a06c6 --- /dev/null +++ b/src/views/TestTable.vue @@ -0,0 +1,198 @@ + + + + + + + diff --git a/src/views/access/Access.vue b/src/views/access/Access.vue new file mode 100644 index 0000000..79cf834 --- /dev/null +++ b/src/views/access/Access.vue @@ -0,0 +1,148 @@ + + + + + + diff --git a/src/views/ad/AddPackage.vue b/src/views/ad/AddPackage.vue new file mode 100644 index 0000000..195b31b --- /dev/null +++ b/src/views/ad/AddPackage.vue @@ -0,0 +1,273 @@ + + + + + + + + + diff --git a/src/views/ad/ListPackage.vue b/src/views/ad/ListPackage.vue new file mode 100644 index 0000000..18fbe03 --- /dev/null +++ b/src/views/ad/ListPackage.vue @@ -0,0 +1,139 @@ + + + + + diff --git a/src/views/ad/tablePackage.js b/src/views/ad/tablePackage.js new file mode 100644 index 0000000..2efef12 --- /dev/null +++ b/src/views/ad/tablePackage.js @@ -0,0 +1,12 @@ +import XTbl,{Xtc} from '../../components/x-table/index'; +const tbl = new XTbl('/admin/ipc/table', 'لسیت بسته ها'); + +tbl.add(new Xtc('title', 'نام بسته').filterText()) +tbl.add(new Xtc('active', 'وضعبت').filterSwitch().renderSlot('active')) +tbl.add(new Xtc('description', 'توضیح').filterNumber()) +tbl.add(new Xtc('saj', 'تاریخ شروع').filterDate()) +tbl.add(new Xtc('eaj', 'تاریخ پایان').filterDate()) +tbl.add(new Xtc('opt', 'عملیات').noSort().renderSlot('opt')) + +export default tbl; + diff --git a/src/views/adv/AdvAttributeComponent.vue b/src/views/adv/AdvAttributeComponent.vue new file mode 100644 index 0000000..8f89f83 --- /dev/null +++ b/src/views/adv/AdvAttributeComponent.vue @@ -0,0 +1,131 @@ + + + + + + + + + + + diff --git a/src/views/adv/AdvAttributeModal.vue b/src/views/adv/AdvAttributeModal.vue new file mode 100644 index 0000000..cc95fe7 --- /dev/null +++ b/src/views/adv/AdvAttributeModal.vue @@ -0,0 +1,86 @@ + + + + + diff --git a/src/views/adv/AdvEdit.vue b/src/views/adv/AdvEdit.vue new file mode 100644 index 0000000..268e33e --- /dev/null +++ b/src/views/adv/AdvEdit.vue @@ -0,0 +1,437 @@ + + + + + + + + + diff --git a/src/views/adv/AdvExpiredList.vue b/src/views/adv/AdvExpiredList.vue new file mode 100644 index 0000000..0c14d41 --- /dev/null +++ b/src/views/adv/AdvExpiredList.vue @@ -0,0 +1,62 @@ + + + + + + diff --git a/src/views/adv/AdvExpiredListModel.js b/src/views/adv/AdvExpiredListModel.js new file mode 100644 index 0000000..715f339 --- /dev/null +++ b/src/views/adv/AdvExpiredListModel.js @@ -0,0 +1,14 @@ +import XTbl, {Xtc} from '../../components/x-table/index'; + +const tbl = new XTbl('/admin/request', 'لیست درخواست های آگهی های منقضی شده'); + +tbl.add(new Xtc('id', 'کد درخواست').filterNumber()); +tbl.add(new Xtc('customer.mobile', 'موبایل درخواست دهنده').filterText()); +tbl.add(new Xtc('adv_id', 'کد آگهی').filterNumber()); +tbl.add(new Xtc('adv.collection.title', 'دسته آگهی').filterText()); +tbl.add(new Xtc('adv.city', 'شهر آگهی').filterText()); +tbl.add(new Xtc('caj', 'تاریخ ثبت درخواست').filterDate()); +tbl.add(new Xtc('adv.owner.mobile', 'مالک اگهی').filterText()); +tbl.add(new Xtc('adv.marketer.mobile', 'بازاریاب آگهی').filterText()); + +export default tbl; diff --git a/src/views/adv/AdvImagesComponent.vue b/src/views/adv/AdvImagesComponent.vue new file mode 100644 index 0000000..9de2817 --- /dev/null +++ b/src/views/adv/AdvImagesComponent.vue @@ -0,0 +1,104 @@ + + + + + diff --git a/src/views/adv/AdvList.vue b/src/views/adv/AdvList.vue new file mode 100644 index 0000000..0046feb --- /dev/null +++ b/src/views/adv/AdvList.vue @@ -0,0 +1,495 @@ + + + + + diff --git a/src/views/adv/AdvListModel.js b/src/views/adv/AdvListModel.js new file mode 100644 index 0000000..34eb54d --- /dev/null +++ b/src/views/adv/AdvListModel.js @@ -0,0 +1,21 @@ +import XTbl, {Xtc} from '../../components/x-table/index'; + + +const tbl = new XTbl('admin/adv/table', 'لیست آگهی های ثبت شده'); + tbl.add(new Xtc('title', 'عنوان آگهی').filterText()); + tbl.add(new Xtc('id', 'کد آگهی').filterText()); + tbl.add(new Xtc('collection.title', 'دسته آگهی').filterText()); + tbl.add(new Xtc('city', 'شهر').filterText()); + tbl.add(new Xtc('caj', 'تاریخ ثبت').filterDate()); + tbl.add(new Xtc('exaj', 'تاریخ انقضا').hidden().filterDate()); + tbl.add(new Xtc('marketer_phone', 'بازاریاب آگهی').hidden().filterText()); + tbl.add(new Xtc('owner.mobile', 'مالک').filterText().hidden()); + tbl.add(new Xtc('acceptor.name', 'ناظر').hidden().filterText()); + tbl.add(new Xtc('sts_str', 'وضعیت').filterSwitch()); + tbl.add(new Xtc('active', 'فعالسازی آگهی').filterSwitch().renderSlot('active_adv')); + tbl.add(new Xtc('lock', 'قفل').filterSwitch().renderSlot('lock')); + tbl.add(new Xtc('vaj', 'تاریخ نظارت').hidden().filterDate()); + tbl.add(new Xtc('price', 'قیمت آگهی').hidden().filterNumber()); + tbl.add(new Xtc('id', 'عملیات').noSort().renderSlot('opt')); + +export default tbl; diff --git a/src/views/adv/AdvMaliciousListModel.js b/src/views/adv/AdvMaliciousListModel.js new file mode 100644 index 0000000..58b6a98 --- /dev/null +++ b/src/views/adv/AdvMaliciousListModel.js @@ -0,0 +1,17 @@ +import XTbl, {Xtc} from '../../components/x-table/index'; + +const tbl = new XTbl('/list/table', 'لیست آگهی های حذف شده'); +tbl.add(new Xtc('title', 'بازه زمانی').filterSwitch()); +tbl.add(new Xtc('title', 'کد آگهی').filterSwitch()); +tbl.add(new Xtc('title', 'ثبت کننده آگهی').filterSwitch()); +tbl.add(new Xtc('title', 'مالک آگهی').filterSwitch()); +tbl.add(new Xtc('title', 'گزارش دهنده آگهی').filterSwitch()); +tbl.add(new Xtc('title', 'علت گزارش').filterSwitch()); +tbl.add(new Xtc('title', 'توضیحات').filterSwitch()); +tbl.add(new Xtc('title', 'دسته').filterSwitch()); +tbl.add(new Xtc('title', 'شهر').filterSwitch()); +tbl.add(new Xtc('title', 'ناظر').filterSwitch()); +tbl.add(new Xtc('title', 'عملیات').noSort()); + +export default tbl; + diff --git a/src/views/adv/AdvMaliciouslist.vue b/src/views/adv/AdvMaliciouslist.vue new file mode 100644 index 0000000..25c56ff --- /dev/null +++ b/src/views/adv/AdvMaliciouslist.vue @@ -0,0 +1,55 @@ + + + + + + diff --git a/src/views/advertising/ChartAdvertising.vue b/src/views/advertising/ChartAdvertising.vue new file mode 100644 index 0000000..dcb89f1 --- /dev/null +++ b/src/views/advertising/ChartAdvertising.vue @@ -0,0 +1,599 @@ + + + + + diff --git a/src/views/advertising/Listadvertising.vue b/src/views/advertising/Listadvertising.vue new file mode 100644 index 0000000..72b2e8b --- /dev/null +++ b/src/views/advertising/Listadvertising.vue @@ -0,0 +1,45 @@ + + + + + diff --git a/src/views/advertising/tableadvertising.js b/src/views/advertising/tableadvertising.js new file mode 100644 index 0000000..fedf198 --- /dev/null +++ b/src/views/advertising/tableadvertising.js @@ -0,0 +1,10 @@ +import XTbl,{Xtc} from '../../components/x-table/index'; +const tbl = new XTbl('/admin/adv/delete', 'لیست دلایل حذف آگهی'); + +tbl.add(new Xtc('id', 'کدآگهی').filterText()) +tbl.add(new Xtc('reason_delete', 'دلیل حذف').filterText()) +tbl.add(new Xtc('uaj', 'تاریخ حذف').filterDate()) +tbl.add(new Xtc('removal_type', 'حذف کننده').filterSelect()) + +export default tbl; + diff --git a/src/views/apps/advDestructive/ChartDestructiveAdv.vue b/src/views/apps/advDestructive/ChartDestructiveAdv.vue new file mode 100644 index 0000000..7e8f852 --- /dev/null +++ b/src/views/apps/advDestructive/ChartDestructiveAdv.vue @@ -0,0 +1,354 @@ + + + + + diff --git a/src/views/apps/advDestructive/ListDestructiveadv.vue b/src/views/apps/advDestructive/ListDestructiveadv.vue new file mode 100644 index 0000000..2741927 --- /dev/null +++ b/src/views/apps/advDestructive/ListDestructiveadv.vue @@ -0,0 +1,87 @@ + + + + diff --git a/src/views/apps/advDestructive/tableDestructive.js b/src/views/apps/advDestructive/tableDestructive.js new file mode 100644 index 0000000..9216783 --- /dev/null +++ b/src/views/apps/advDestructive/tableDestructive.js @@ -0,0 +1,14 @@ +import XTbl,{Xtc} from '../../../components/x-table/index'; +const tbl = new XTbl('/admin/badadv/table', 'لیست آگهی های مخرب'); + +tbl.add(new Xtc('caj', 'تاریخ ثبت').filterDate()) +tbl.add(new Xtc('owner_adv.mobile', 'مالک آگهی').filterText()) +tbl.add(new Xtc('customer.mobile', 'گزارش دهنده آگهی').filterText()) +tbl.add(new Xtc('title', 'علت گزارش').filterText()) +tbl.add(new Xtc('body', 'توضیحات').filterText()) +tbl.add(new Xtc('acceptor.name', 'ناظر').filterText()) +tbl.add(new Xtc('adv.active', 'وضعیت').filterSwitch().renderSlot('adv_active')) +tbl.add(new Xtc('', 'عملیات').noSort().renderSlot('opt')) + +export default tbl; + diff --git a/src/views/apps/calendar/SimpleCalendar.vue b/src/views/apps/calendar/SimpleCalendar.vue new file mode 100644 index 0000000..d1d134c --- /dev/null +++ b/src/views/apps/calendar/SimpleCalendar.vue @@ -0,0 +1,324 @@ + + + + + diff --git a/src/views/apps/category/Add.vue b/src/views/apps/category/Add.vue new file mode 100644 index 0000000..f4fc316 --- /dev/null +++ b/src/views/apps/category/Add.vue @@ -0,0 +1,530 @@ + + + + + + + diff --git a/src/views/apps/category/CollectionAttributeModal.js b/src/views/apps/category/CollectionAttributeModal.js new file mode 100644 index 0000000..d163718 --- /dev/null +++ b/src/views/apps/category/CollectionAttributeModal.js @@ -0,0 +1,16 @@ +import XTbl, {Xtc} from '../../../components/x-table'; + +const tbl = new XTbl('/admin/collection/attribute', ''); + +tbl.add(new Xtc('title', 'نام صفت')); +tbl.add(new Xtc('value', 'مقادیر').renderSlot('values')); +tbl.add(new Xtc('required', 'ورود الزامی').renderSlot('required')); +tbl.add(new Xtc('show_thumb', 'نمایش بندانگشت').renderSlot('show_thumb')); +tbl.add(new Xtc('show_lta', 'نمایش گوش به زنگ').renderSlot('show_lta')); +tbl.add(new Xtc('show_filter', 'نمایش در فبلتر').renderSlot('show_filter')); +tbl.add(new Xtc('show_exchange', 'معاوضه').renderSlot('show_exchange')); +tbl.add(new Xtc('opt', 'عملیات').noSort().renderSlot('opt')); + +export default tbl; + + diff --git a/src/views/apps/category/Edit.vue b/src/views/apps/category/Edit.vue new file mode 100644 index 0000000..1e17672 --- /dev/null +++ b/src/views/apps/category/Edit.vue @@ -0,0 +1,12 @@ + + + diff --git a/src/views/apps/category/List.vue b/src/views/apps/category/List.vue new file mode 100644 index 0000000..5988a93 --- /dev/null +++ b/src/views/apps/category/List.vue @@ -0,0 +1,266 @@ + + + + + diff --git a/src/views/apps/chat/Chat.vue b/src/views/apps/chat/Chat.vue new file mode 100644 index 0000000..3623ae6 --- /dev/null +++ b/src/views/apps/chat/Chat.vue @@ -0,0 +1,249 @@ + + + + + + + + + diff --git a/src/views/apps/chat/ChatContact.vue b/src/views/apps/chat/ChatContact.vue new file mode 100644 index 0000000..1a12f5e --- /dev/null +++ b/src/views/apps/chat/ChatContact.vue @@ -0,0 +1,40 @@ + + + + + + diff --git a/src/views/apps/chat/ChatLog.vue b/src/views/apps/chat/ChatLog.vue new file mode 100644 index 0000000..b260ead --- /dev/null +++ b/src/views/apps/chat/ChatLog.vue @@ -0,0 +1,100 @@ + + + + + diff --git a/src/views/apps/chat/ChatNavbar.vue b/src/views/apps/chat/ChatNavbar.vue new file mode 100644 index 0000000..23f20c8 --- /dev/null +++ b/src/views/apps/chat/ChatNavbar.vue @@ -0,0 +1,85 @@ + + + + + + diff --git a/src/views/apps/chat/UserProfile.vue b/src/views/apps/chat/UserProfile.vue new file mode 100644 index 0000000..e678d82 --- /dev/null +++ b/src/views/apps/chat/UserProfile.vue @@ -0,0 +1,123 @@ + + + + + + diff --git a/src/views/apps/customer/ActiveAccount.vue b/src/views/apps/customer/ActiveAccount.vue new file mode 100644 index 0000000..6c354f5 --- /dev/null +++ b/src/views/apps/customer/ActiveAccount.vue @@ -0,0 +1,158 @@ + + + + + diff --git a/src/views/apps/customer/AddCustomer.vue b/src/views/apps/customer/AddCustomer.vue new file mode 100644 index 0000000..d240482 --- /dev/null +++ b/src/views/apps/customer/AddCustomer.vue @@ -0,0 +1,257 @@ + + + + + + + + diff --git a/src/views/apps/customer/ChartCustomer.vue b/src/views/apps/customer/ChartCustomer.vue new file mode 100644 index 0000000..512c7af --- /dev/null +++ b/src/views/apps/customer/ChartCustomer.vue @@ -0,0 +1,135 @@ + + + + + diff --git a/src/views/apps/customer/CustomerView.vue b/src/views/apps/customer/CustomerView.vue new file mode 100644 index 0000000..303789a --- /dev/null +++ b/src/views/apps/customer/CustomerView.vue @@ -0,0 +1,289 @@ + + + + + + + diff --git a/src/views/apps/customer/Edit.vue b/src/views/apps/customer/Edit.vue new file mode 100644 index 0000000..a250d29 --- /dev/null +++ b/src/views/apps/customer/Edit.vue @@ -0,0 +1,13 @@ + + + diff --git a/src/views/apps/customer/EditCustomer.vue b/src/views/apps/customer/EditCustomer.vue new file mode 100644 index 0000000..da0554f --- /dev/null +++ b/src/views/apps/customer/EditCustomer.vue @@ -0,0 +1,254 @@ + + + + + + diff --git a/src/views/apps/customer/ManagementCustomer.vue b/src/views/apps/customer/ManagementCustomer.vue new file mode 100644 index 0000000..e15b538 --- /dev/null +++ b/src/views/apps/customer/ManagementCustomer.vue @@ -0,0 +1,212 @@ + + + + + diff --git a/src/views/apps/customer/customer-edit/CustomerEdit.vue b/src/views/apps/customer/customer-edit/CustomerEdit.vue new file mode 100644 index 0000000..6fe8922 --- /dev/null +++ b/src/views/apps/customer/customer-edit/CustomerEdit.vue @@ -0,0 +1,95 @@ + + + + + diff --git a/src/views/apps/customer/customer-edit/CustomerEditTabAccount.vue b/src/views/apps/customer/customer-edit/CustomerEditTabAccount.vue new file mode 100644 index 0000000..75b07e4 --- /dev/null +++ b/src/views/apps/customer/customer-edit/CustomerEditTabAccount.vue @@ -0,0 +1,186 @@ + + + + + diff --git a/src/views/apps/customer/customer-edit/CustomerEditTabInformation.vue b/src/views/apps/customer/customer-edit/CustomerEditTabInformation.vue new file mode 100644 index 0000000..24f339f --- /dev/null +++ b/src/views/apps/customer/customer-edit/CustomerEditTabInformation.vue @@ -0,0 +1,160 @@ + + + + + diff --git a/src/views/apps/customer/customer-edit/CustomerEditTabSocial.vue b/src/views/apps/customer/customer-edit/CustomerEditTabSocial.vue new file mode 100644 index 0000000..c876e8b --- /dev/null +++ b/src/views/apps/customer/customer-edit/CustomerEditTabSocial.vue @@ -0,0 +1,134 @@ + + + + + diff --git a/src/views/apps/customer/listCustomer.vue b/src/views/apps/customer/listCustomer.vue new file mode 100644 index 0000000..3ca88bc --- /dev/null +++ b/src/views/apps/customer/listCustomer.vue @@ -0,0 +1,166 @@ + + + + + diff --git a/src/views/apps/customer/tableActiveAccount.js b/src/views/apps/customer/tableActiveAccount.js new file mode 100644 index 0000000..4401bcf --- /dev/null +++ b/src/views/apps/customer/tableActiveAccount.js @@ -0,0 +1,14 @@ +import XTbl,{Xtc} from '../../../components/x-table/index'; +const tbl = new XTbl('/admin/customer/deactive', 'مشاهده درخواست های فعالسازی اکانت'); + +tbl.add(new Xtc('name', 'نام مشتری').filterText()) +tbl.add(new Xtc('mobile', 'شماره موبایل').filterNumber()) +tbl.add(new Xtc('sts_str', 'اهرازهویت').filterSelect()) +tbl.add(new Xtc('meta.reason_active', 'توضیحات ').filterText()) +tbl.add(new Xtc('created_at', 'تاریخ').filterDate()) +tbl.add(new Xtc('reason_deactive', 'توضیح مدیر').filterText()) +tbl.add(new Xtc('acceptor_id', 'مدیر غیرفعال کننده').filterText()) +tbl.add(new Xtc('', 'امکانات').noSort().renderSlot('names')) + +export default tbl; + diff --git a/src/views/apps/customer/tableCustomer.js b/src/views/apps/customer/tableCustomer.js new file mode 100644 index 0000000..15585ce --- /dev/null +++ b/src/views/apps/customer/tableCustomer.js @@ -0,0 +1,17 @@ +import XTbl,{Xtc} from '../../../components/x-table/index'; + +const tbl = new XTbl('/admin/customer/table', 'جدول مشتریان'); + +tbl.add(new Xtc('mobile', 'شماره موبایل').filterNumber()) +tbl.add(new Xtc('name', 'نام مشتری').filterText()) +tbl.add(new Xtc('avatar', 'عکس پروفایل').hidden().filterSwitch().renderSlot('image')) +tbl.add(new Xtc('ncode', 'شماره ملی').filterNumber()) +tbl.add(new Xtc('email', 'ایمیل').filterText()) +tbl.add(new Xtc('active', 'وضعیت اکانت').filterSelect().renderSlot('active')) +tbl.add(new Xtc('total_adv', 'تعداد آگهی').filterNumber()) +tbl.add(new Xtc('caj', 'تاریخ عضویت').hidden().filterDate()) +// tbl.add(new Xtc('adv', 'دسته های ثبت آگهی').renderSlot('title_collection')) +tbl.add(new Xtc('opt', 'عملیات').noSort().renderSlot('names')) + +export default tbl; + diff --git a/src/views/apps/customer/tableManagement.js b/src/views/apps/customer/tableManagement.js new file mode 100644 index 0000000..4d1445c --- /dev/null +++ b/src/views/apps/customer/tableManagement.js @@ -0,0 +1,14 @@ + +import XTbl,{Xtc} from '../../../components/x-table/index'; +const tbl = new XTbl('/admin/customer/revision', 'مشاهده درخواست های اهرازهویت'); + +tbl.add(new Xtc('name', 'نام مشتری').filterText()) +tbl.add(new Xtc('mobile', 'شماره موبایل').filterNumber()) +tbl.add(new Xtc('sts_str', 'وضعیت').filterSelect()) +tbl.add(new Xtc('caj', 'تاریخ').filterDate()) +tbl.add(new Xtc('acceptor_id', 'مدیرتاییدکننده').filterText()) +tbl.add(new Xtc('score_p', 'امتیاز پرداختنی')) +tbl.add(new Xtc('', 'عملیات').noSort().renderSlot('names')) + +export default tbl; + diff --git a/src/views/apps/eCommerce/ECommerceCheckout.vue b/src/views/apps/eCommerce/ECommerceCheckout.vue new file mode 100644 index 0000000..7c4f81f --- /dev/null +++ b/src/views/apps/eCommerce/ECommerceCheckout.vue @@ -0,0 +1,496 @@ + + + + + + + diff --git a/src/views/apps/eCommerce/ECommerceItemDetailView.vue b/src/views/apps/eCommerce/ECommerceItemDetailView.vue new file mode 100644 index 0000000..7f75ca5 --- /dev/null +++ b/src/views/apps/eCommerce/ECommerceItemDetailView.vue @@ -0,0 +1,467 @@ + + + + + + + diff --git a/src/views/apps/eCommerce/ECommerceShop.vue b/src/views/apps/eCommerce/ECommerceShop.vue new file mode 100644 index 0000000..16a42f7 --- /dev/null +++ b/src/views/apps/eCommerce/ECommerceShop.vue @@ -0,0 +1,490 @@ + + + + + + + + + diff --git a/src/views/apps/eCommerce/ECommerceWishList.vue b/src/views/apps/eCommerce/ECommerceWishList.vue new file mode 100644 index 0000000..cebd3aa --- /dev/null +++ b/src/views/apps/eCommerce/ECommerceWishList.vue @@ -0,0 +1,101 @@ + + + + + + + diff --git a/src/views/apps/eCommerce/components/ItemGridView.vue b/src/views/apps/eCommerce/components/ItemGridView.vue new file mode 100644 index 0000000..13eb2e4 --- /dev/null +++ b/src/views/apps/eCommerce/components/ItemGridView.vue @@ -0,0 +1,81 @@ + + + + + + + diff --git a/src/views/apps/eCommerce/components/ItemListView.vue b/src/views/apps/eCommerce/components/ItemListView.vue new file mode 100644 index 0000000..7d5f90b --- /dev/null +++ b/src/views/apps/eCommerce/components/ItemListView.vue @@ -0,0 +1,126 @@ + + + + + + + diff --git a/src/views/apps/email/Email.vue b/src/views/apps/email/Email.vue new file mode 100644 index 0000000..f6c11ba --- /dev/null +++ b/src/views/apps/email/Email.vue @@ -0,0 +1,290 @@ + + + + + + + + + diff --git a/src/views/apps/email/EmailMailCard.vue b/src/views/apps/email/EmailMailCard.vue new file mode 100644 index 0000000..b94dce5 --- /dev/null +++ b/src/views/apps/email/EmailMailCard.vue @@ -0,0 +1,83 @@ + + + + + diff --git a/src/views/apps/email/EmailSidebar.vue b/src/views/apps/email/EmailSidebar.vue new file mode 100644 index 0000000..e2508be --- /dev/null +++ b/src/views/apps/email/EmailSidebar.vue @@ -0,0 +1,183 @@ + + + + + + + diff --git a/src/views/apps/email/EmailView.vue b/src/views/apps/email/EmailView.vue new file mode 100644 index 0000000..b60fe2a --- /dev/null +++ b/src/views/apps/email/EmailView.vue @@ -0,0 +1,224 @@ + + + + + + + diff --git a/src/views/apps/email/MailItem.vue b/src/views/apps/email/MailItem.vue new file mode 100644 index 0000000..92244dc --- /dev/null +++ b/src/views/apps/email/MailItem.vue @@ -0,0 +1,92 @@ + + + + + + diff --git a/src/views/apps/finance/BagList.vue b/src/views/apps/finance/BagList.vue new file mode 100644 index 0000000..3505e04 --- /dev/null +++ b/src/views/apps/finance/BagList.vue @@ -0,0 +1,230 @@ + + + + + diff --git a/src/views/apps/finance/DebitList.vue b/src/views/apps/finance/DebitList.vue new file mode 100644 index 0000000..5042927 --- /dev/null +++ b/src/views/apps/finance/DebitList.vue @@ -0,0 +1,254 @@ + + + + + diff --git a/src/views/apps/finance/FeeList.vue b/src/views/apps/finance/FeeList.vue new file mode 100644 index 0000000..98e7bc1 --- /dev/null +++ b/src/views/apps/finance/FeeList.vue @@ -0,0 +1,245 @@ + + + + + diff --git a/src/views/apps/finance/OrderList.vue b/src/views/apps/finance/OrderList.vue new file mode 100644 index 0000000..0f7b5c3 --- /dev/null +++ b/src/views/apps/finance/OrderList.vue @@ -0,0 +1,274 @@ + + + + + diff --git a/src/views/apps/inbox/InboxMessage.vue b/src/views/apps/inbox/InboxMessage.vue new file mode 100644 index 0000000..8325c61 --- /dev/null +++ b/src/views/apps/inbox/InboxMessage.vue @@ -0,0 +1,111 @@ + + + + + diff --git a/src/views/apps/inbox/tableInbox.js b/src/views/apps/inbox/tableInbox.js new file mode 100644 index 0000000..7414ab0 --- /dev/null +++ b/src/views/apps/inbox/tableInbox.js @@ -0,0 +1,17 @@ +import XTbl,{Xtc} from '../../../components/x-table/index'; + +const tbl = new XTbl('/admin/contact/table', 'لیست صندوق ورودی'); + +tbl.add(new Xtc('name', 'نام').filterText()) +tbl.add(new Xtc('mobile', 'شماره موبایل').filterNumber()) +tbl.add(new Xtc('email', 'ایمیل').filterText()) +tbl.add(new Xtc('subject', 'موضوع').filterText()) +tbl.add(new Xtc('body', 'متن پیام').filterText()) +tbl.add(new Xtc('vaj', 'تاریخ وساعت ارسال').hidden().filterDate()) +tbl.add(new Xtc('responser_id', 'بررسی کننده').hidden().filterText()) +tbl.add(new Xtc('response_message', 'پاسخ به ناظر').hidden().filterText()) +tbl.add(new Xtc('opt', 'عملیات').noSort().renderSlot('opt')) + +export default tbl; + + \ No newline at end of file diff --git a/src/views/apps/logs/LogsList.vue b/src/views/apps/logs/LogsList.vue new file mode 100644 index 0000000..9bbee52 --- /dev/null +++ b/src/views/apps/logs/LogsList.vue @@ -0,0 +1,226 @@ + + + + + diff --git a/src/views/apps/logs/Rules.vue b/src/views/apps/logs/Rules.vue new file mode 100644 index 0000000..f921682 --- /dev/null +++ b/src/views/apps/logs/Rules.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/views/apps/opinions/ChartOpinions.vue b/src/views/apps/opinions/ChartOpinions.vue new file mode 100644 index 0000000..6244bc8 --- /dev/null +++ b/src/views/apps/opinions/ChartOpinions.vue @@ -0,0 +1,71 @@ + + + + diff --git a/src/views/apps/opinions/listopinions.vue b/src/views/apps/opinions/listopinions.vue new file mode 100644 index 0000000..197af29 --- /dev/null +++ b/src/views/apps/opinions/listopinions.vue @@ -0,0 +1,186 @@ + + + + + + diff --git a/src/views/apps/opinions/tableOpinions.js b/src/views/apps/opinions/tableOpinions.js new file mode 100644 index 0000000..4d103b0 --- /dev/null +++ b/src/views/apps/opinions/tableOpinions.js @@ -0,0 +1,20 @@ +import XTbl,{Xtc} from '../../../components/x-table/index'; + +const tbl = new XTbl('/admin/comment/table', 'لیست دیدگاه ها'); + +tbl.add(new Xtc('body', 'بدنه دیدگاه').filterText()) +tbl.add(new Xtc('body', 'دیدگاه').hidden().filterText()) +tbl.add(new Xtc('meta', 'توضیحات').hidden().filterNumber()) +tbl.add(new Xtc('owner.name', 'نام تاییدکننده').filterNumber()) +tbl.add(new Xtc('owner.mobile', 'موبایل تاییدکننده').filterDate()) +tbl.add(new Xtc('subject', 'موضوع دیدگاه').filterText()) +tbl.add(new Xtc('acceptor', 'تاییدکننده').filterText()) +tbl.add(new Xtc('sts_str', 'وضعیت' ).filterSelect()) +tbl.add(new Xtc('vaj', 'تاریخ نظارت').hidden().filterDate()) +tbl.add(new Xtc('opt', 'عملیات').noSort().renderSlot('names')) + +export default tbl; + + + + diff --git a/src/views/apps/product/AddProduct.vue b/src/views/apps/product/AddProduct.vue new file mode 100644 index 0000000..4e1d6eb --- /dev/null +++ b/src/views/apps/product/AddProduct.vue @@ -0,0 +1,292 @@ + + + + + + + + diff --git a/src/views/apps/product/EditProduct.vue b/src/views/apps/product/EditProduct.vue new file mode 100644 index 0000000..9f8d755 --- /dev/null +++ b/src/views/apps/product/EditProduct.vue @@ -0,0 +1,81 @@ + + + + + + + + diff --git a/src/views/apps/product/EditVariant.vue b/src/views/apps/product/EditVariant.vue new file mode 100644 index 0000000..753d94c --- /dev/null +++ b/src/views/apps/product/EditVariant.vue @@ -0,0 +1,24 @@ + + + + + + diff --git a/src/views/apps/product/ProductList.vue b/src/views/apps/product/ProductList.vue new file mode 100644 index 0000000..f0c7327 --- /dev/null +++ b/src/views/apps/product/ProductList.vue @@ -0,0 +1,367 @@ + + + + + + diff --git a/src/views/apps/product/Varaint.vue b/src/views/apps/product/Varaint.vue new file mode 100644 index 0000000..53bc966 --- /dev/null +++ b/src/views/apps/product/Varaint.vue @@ -0,0 +1,346 @@ + + + + + + + + diff --git a/src/views/apps/system/Introductionsystem.vue b/src/views/apps/system/Introductionsystem.vue new file mode 100644 index 0000000..36eb241 --- /dev/null +++ b/src/views/apps/system/Introductionsystem.vue @@ -0,0 +1,37 @@ + + + diff --git a/src/views/apps/system/tableSystem.js b/src/views/apps/system/tableSystem.js new file mode 100644 index 0000000..b8f9de1 --- /dev/null +++ b/src/views/apps/system/tableSystem.js @@ -0,0 +1,11 @@ +import XTbl,{Xtc} from '../../../components/x-table/index'; + +const tbl = new XTbl('/admin/present/table', 'لیست معرفی به سیستم'); + +tbl.add(new Xtc('presenter.mobile', 'معرفی کننده').filterNumber()) +tbl.add(new Xtc('mobile', 'معرفی شده و واردشده به سیستم').filterNumber()) +tbl.add(new Xtc('created_at', 'تاریخ ثبت ورودازلینک معرفی').filterDate()) +tbl.add(new Xtc('score', 'امتیازات کسرشده').filterNumber().renderSlot('score')) + +export default tbl; + diff --git a/src/views/apps/ticket/Ticket.vue b/src/views/apps/ticket/Ticket.vue new file mode 100644 index 0000000..b2a9501 --- /dev/null +++ b/src/views/apps/ticket/Ticket.vue @@ -0,0 +1,254 @@ + + + + + + + + + diff --git a/src/views/apps/ticket/TicketItem.vue b/src/views/apps/ticket/TicketItem.vue new file mode 100644 index 0000000..acc0b3f --- /dev/null +++ b/src/views/apps/ticket/TicketItem.vue @@ -0,0 +1,92 @@ + + + + + + diff --git a/src/views/apps/ticket/TicketMailCard.vue b/src/views/apps/ticket/TicketMailCard.vue new file mode 100644 index 0000000..e887c83 --- /dev/null +++ b/src/views/apps/ticket/TicketMailCard.vue @@ -0,0 +1,83 @@ + + + + + diff --git a/src/views/apps/ticket/TicketSidebar.vue b/src/views/apps/ticket/TicketSidebar.vue new file mode 100644 index 0000000..7912239 --- /dev/null +++ b/src/views/apps/ticket/TicketSidebar.vue @@ -0,0 +1,173 @@ + + + + + + + diff --git a/src/views/apps/ticket/TicketView.vue b/src/views/apps/ticket/TicketView.vue new file mode 100644 index 0000000..3692591 --- /dev/null +++ b/src/views/apps/ticket/TicketView.vue @@ -0,0 +1,189 @@ + + + + + + + diff --git a/src/views/apps/todo/Todo.vue b/src/views/apps/todo/Todo.vue new file mode 100644 index 0000000..f6cc472 --- /dev/null +++ b/src/views/apps/todo/Todo.vue @@ -0,0 +1,165 @@ + + + + + + + + + diff --git a/src/views/apps/todo/TodoAddNew.vue b/src/views/apps/todo/TodoAddNew.vue new file mode 100644 index 0000000..4bcf89b --- /dev/null +++ b/src/views/apps/todo/TodoAddNew.vue @@ -0,0 +1,104 @@ + + + + + + diff --git a/src/views/apps/todo/TodoEdit.vue b/src/views/apps/todo/TodoEdit.vue new file mode 100644 index 0000000..1487ac4 --- /dev/null +++ b/src/views/apps/todo/TodoEdit.vue @@ -0,0 +1,117 @@ + + + + + + diff --git a/src/views/apps/todo/TodoFilters.vue b/src/views/apps/todo/TodoFilters.vue new file mode 100644 index 0000000..782d4ca --- /dev/null +++ b/src/views/apps/todo/TodoFilters.vue @@ -0,0 +1,78 @@ + + + + + + diff --git a/src/views/apps/todo/TodoTask.vue b/src/views/apps/todo/TodoTask.vue new file mode 100644 index 0000000..cf47705 --- /dev/null +++ b/src/views/apps/todo/TodoTask.vue @@ -0,0 +1,123 @@ + + + + + + diff --git a/src/views/apps/user/ChartUser.vue b/src/views/apps/user/ChartUser.vue new file mode 100644 index 0000000..8349450 --- /dev/null +++ b/src/views/apps/user/ChartUser.vue @@ -0,0 +1,1079 @@ + + + + diff --git a/src/views/apps/user/Edit.vue b/src/views/apps/user/Edit.vue new file mode 100644 index 0000000..fbe6ccb --- /dev/null +++ b/src/views/apps/user/Edit.vue @@ -0,0 +1,17 @@ + + + + + \ No newline at end of file diff --git a/src/views/apps/user/SpecialUser.vue b/src/views/apps/user/SpecialUser.vue new file mode 100644 index 0000000..d922410 --- /dev/null +++ b/src/views/apps/user/SpecialUser.vue @@ -0,0 +1,57 @@ + + + diff --git a/src/views/apps/user/TableList.js b/src/views/apps/user/TableList.js new file mode 100644 index 0000000..30d8630 --- /dev/null +++ b/src/views/apps/user/TableList.js @@ -0,0 +1,19 @@ + +import XTbl,{Xtc} from '../../../components/x-table/index'; +const tbl = new XTbl('/admin/user/table', 'لیست کاربران'); + +tbl.add(new Xtc('mobile', 'موبایل').filterNumber()) +tbl.add(new Xtc('name', 'نام').filterText()) +tbl.add(new Xtc('city', 'شهر').hidden().filterText()) +tbl.add(new Xtc('ncode', 'کدملی').filterNumber()) +tbl.add(new Xtc('birth_day', 'تاریخ تولد').hidden().filterDate()) +tbl.add(new Xtc('email', 'ایمیل').filterText()) +tbl.add(new Xtc('avatar', 'عکس پروفایل').hidden().filterSwitch()) +tbl.add(new Xtc('caj', 'تاریخ فرم ارسال').hidden().filterDate()) +tbl.add(new Xtc('user_type_str','نوع کاربری').hidden().filterText()) +tbl.add(new Xtc('active', 'فعالسازی').filterSwitch().renderSlot('active')) +tbl.add(new Xtc('sts_str', 'وضعیت').filterSelect().renderSlot('sts_str')) +tbl.add(new Xtc('', 'عملیات').noSort().renderSlot('names')) + +export default tbl; + diff --git a/src/views/apps/user/UserActivity.vue b/src/views/apps/user/UserActivity.vue new file mode 100644 index 0000000..d527b39 --- /dev/null +++ b/src/views/apps/user/UserActivity.vue @@ -0,0 +1,50 @@ + + + + + diff --git a/src/views/apps/user/UserView.vue b/src/views/apps/user/UserView.vue new file mode 100644 index 0000000..b3e0f43 --- /dev/null +++ b/src/views/apps/user/UserView.vue @@ -0,0 +1,306 @@ + + + + + + + + diff --git a/src/views/apps/user/add.vue b/src/views/apps/user/add.vue new file mode 100644 index 0000000..b98ca31 --- /dev/null +++ b/src/views/apps/user/add.vue @@ -0,0 +1,385 @@ + + + + + + + + diff --git a/src/views/apps/user/list.vue b/src/views/apps/user/list.vue new file mode 100644 index 0000000..11adf77 --- /dev/null +++ b/src/views/apps/user/list.vue @@ -0,0 +1,183 @@ + + + + + + + diff --git a/src/views/apps/user/tableSpecialUser.js b/src/views/apps/user/tableSpecialUser.js new file mode 100644 index 0000000..a0f28c2 --- /dev/null +++ b/src/views/apps/user/tableSpecialUser.js @@ -0,0 +1,15 @@ +import XTbl, {Xtc} from '../../../components/x-table/index'; + +const setModel = (id)=>{ + const tbl = new XTbl(`/admin/activity/table/show/${id}`, 'گزارش فغالیت یک کاربر خاص'); + + tbl.add(new Xtc('caj', 'تاریخ و ساعت').filterDate()) + tbl.add(new Xtc('type_str', 'نوع فعالیت').filterText()) + tbl.add(new Xtc('adv_id', 'کد').filterNumber()) + tbl.add(new Xtc('status_str', 'وضعیت').filterSwitch()) + tbl.add(new Xtc('reject_reason', 'دلیل رد').filterText()) + return tbl; +} + +export default setModel + diff --git a/src/views/apps/user/tableUserActivity.js b/src/views/apps/user/tableUserActivity.js new file mode 100644 index 0000000..e854997 --- /dev/null +++ b/src/views/apps/user/tableUserActivity.js @@ -0,0 +1,15 @@ +import XTbl,{Xtc} from '../../../components/x-table/index'; +const tbl = new XTbl('/admin/activity/table', 'لیست کاربران و نظارت'); + +tbl.add(new Xtc('user.fname', 'نام').filterText()) +tbl.add(new Xtc('user.lname', 'نام خانوادگی').filterText()) +tbl.add(new Xtc('user.mobile', 'موبایل').filterNumber()) +tbl.add(new Xtc('type_str', 'نوع نظارت').filterText()) +tbl.add(new Xtc('code', 'کد').filterNumber()) +tbl.add(new Xtc('status_str', 'وضعیت').filterSwitch()) +tbl.add(new Xtc('reject_reason', 'دلیل رد').filterText()) +tbl.add(new Xtc('vaj', 'تاریخ و ساعت').filterDate()) + + +export default tbl; + diff --git a/src/views/apps/user/user-edit/UserEdit.vue b/src/views/apps/user/user-edit/UserEdit.vue new file mode 100644 index 0000000..9575453 --- /dev/null +++ b/src/views/apps/user/user-edit/UserEdit.vue @@ -0,0 +1,103 @@ + + + + + diff --git a/src/views/apps/user/user-edit/UserEditTabAccount.vue b/src/views/apps/user/user-edit/UserEditTabAccount.vue new file mode 100644 index 0000000..31a4cf6 --- /dev/null +++ b/src/views/apps/user/user-edit/UserEditTabAccount.vue @@ -0,0 +1,187 @@ + + + + + diff --git a/src/views/apps/user/user-edit/UserEditTabInformation.vue b/src/views/apps/user/user-edit/UserEditTabInformation.vue new file mode 100644 index 0000000..47feade --- /dev/null +++ b/src/views/apps/user/user-edit/UserEditTabInformation.vue @@ -0,0 +1,161 @@ + + + + + diff --git a/src/views/apps/user/user-edit/UserEditTabSocial.vue b/src/views/apps/user/user-edit/UserEditTabSocial.vue new file mode 100644 index 0000000..c876e8b --- /dev/null +++ b/src/views/apps/user/user-edit/UserEditTabSocial.vue @@ -0,0 +1,134 @@ + + + + + diff --git a/src/views/apps/user/user-list/UserList.vue b/src/views/apps/user/user-list/UserList.vue new file mode 100644 index 0000000..2af2174 --- /dev/null +++ b/src/views/apps/user/user-list/UserList.vue @@ -0,0 +1,305 @@ + + + + + diff --git a/src/views/apps/user/user-list/cell-renderer/CellRendererActions.vue b/src/views/apps/user/user-list/cell-renderer/CellRendererActions.vue new file mode 100644 index 0000000..acf5b60 --- /dev/null +++ b/src/views/apps/user/user-list/cell-renderer/CellRendererActions.vue @@ -0,0 +1,50 @@ + + + diff --git a/src/views/apps/user/user-list/cell-renderer/CellRendererLink.vue b/src/views/apps/user/user-list/cell-renderer/CellRendererLink.vue new file mode 100644 index 0000000..687f834 --- /dev/null +++ b/src/views/apps/user/user-list/cell-renderer/CellRendererLink.vue @@ -0,0 +1,21 @@ + + + diff --git a/src/views/apps/user/user-list/cell-renderer/CellRendererStatus.vue b/src/views/apps/user/user-list/cell-renderer/CellRendererStatus.vue new file mode 100644 index 0000000..5fc1df2 --- /dev/null +++ b/src/views/apps/user/user-list/cell-renderer/CellRendererStatus.vue @@ -0,0 +1,41 @@ + + + + + diff --git a/src/views/apps/user/user-list/cell-renderer/CellRendererVerified.vue b/src/views/apps/user/user-list/cell-renderer/CellRendererVerified.vue new file mode 100644 index 0000000..db4fa9c --- /dev/null +++ b/src/views/apps/user/user-list/cell-renderer/CellRendererVerified.vue @@ -0,0 +1,14 @@ + + + diff --git a/src/views/auth/Login.vue b/src/views/auth/Login.vue new file mode 100644 index 0000000..c64a9ed --- /dev/null +++ b/src/views/auth/Login.vue @@ -0,0 +1,168 @@ + + + + + + + + + + diff --git a/src/views/blog/AddBlog.vue b/src/views/blog/AddBlog.vue new file mode 100644 index 0000000..e6e3ff9 --- /dev/null +++ b/src/views/blog/AddBlog.vue @@ -0,0 +1,167 @@ + + + diff --git a/src/views/blog/ChartBlog.vue b/src/views/blog/ChartBlog.vue new file mode 100644 index 0000000..e9809f2 --- /dev/null +++ b/src/views/blog/ChartBlog.vue @@ -0,0 +1,208 @@ + + + + + + diff --git a/src/views/blog/Listblog.vue b/src/views/blog/Listblog.vue new file mode 100644 index 0000000..00874b2 --- /dev/null +++ b/src/views/blog/Listblog.vue @@ -0,0 +1,232 @@ + + + + + diff --git a/src/views/blog/tableBlog.js b/src/views/blog/tableBlog.js new file mode 100644 index 0000000..64a5e94 --- /dev/null +++ b/src/views/blog/tableBlog.js @@ -0,0 +1,18 @@ + +import XTbl,{Xtc} from '../../components/x-table'; +const tbl = new XTbl('/admin/post/table', 'لیست وبلاگ'); + +tbl.add(new Xtc('title', 'عنوان نوشته').filterText()) +tbl.add(new Xtc('alias', 'نویسنده').filterText()) +tbl.add(new Xtc('user.mobile', 'موبایل نویسنده').filterNumber().renderSlot('alias')) +tbl.add(new Xtc('post_collection', 'دسته ها').filterNumber().renderSlot('names')) +tbl.add(new Xtc('count_comment', 'دیدگاه ها').hidden().filterNumber()) +tbl.add(new Xtc('caj', 'تاریخ ثبت').filterDate()) +tbl.add(new Xtc('acceptor.name', 'ناظر').hidden().filterText()) +tbl.add(new Xtc('sts_str', 'وضعیت').filterSelect()) +tbl.add(new Xtc('vaj', 'تاریخ بررسی مدیر').hidden().filterDate()) +tbl.add(new Xtc('reject_reason', 'نظرمدیر').hidden().filterText()) +tbl.add(new Xtc('opt', 'عملیات').noSort().renderSlot('opt')) + +export default tbl; + diff --git a/src/views/category/Add.vue b/src/views/category/Add.vue new file mode 100644 index 0000000..25fd058 --- /dev/null +++ b/src/views/category/Add.vue @@ -0,0 +1,381 @@ + + + + + + + + diff --git a/src/views/category/CategoryList.vue b/src/views/category/CategoryList.vue new file mode 100644 index 0000000..86b90cb --- /dev/null +++ b/src/views/category/CategoryList.vue @@ -0,0 +1,141 @@ + + + + + diff --git a/src/views/category/CategoryListModel.js b/src/views/category/CategoryListModel.js new file mode 100644 index 0000000..7a1bcc6 --- /dev/null +++ b/src/views/category/CategoryListModel.js @@ -0,0 +1,20 @@ +import XTbl, {Xtc} from '../../components/x-table/index'; + +const tbl = new XTbl('/admin/collection/table', 'لیست دسته بندی ها'); + +tbl.add(new Xtc('title', 'نام دسته').filterText()); +tbl.add(new Xtc('parent.title', 'پدر دسته').filterText()); +tbl.add(new Xtc('has_same_adv', 'نمایش آگهی های مرتبط').filterSwitch().renderSlot('same_adv')); +tbl.add(new Xtc('has_in_menu', 'دسته در منو').filterSwitch().renderSlot('menu')); +tbl.add(new Xtc('is_comparable', 'مقایسه').filterSwitch().hidden().renderSlot('comparable')); +tbl.add(new Xtc('has_comment', 'نظرات').filterSwitch().renderSlot('comment')); +tbl.add(new Xtc('is_count_view', 'نمایش بازدید ها').filterSwitch().renderSlot('view')); +tbl.add(new Xtc('count_adv', 'تعداد آگهی').filterNumber()); +tbl.add(new Xtc('caj', 'تاریخ ساخت دسته').filterNumber().hidden()); +tbl.add(new Xtc('', 'ناظران دسته').filterText().renderSlot('supervisors_item')); +tbl.add(new Xtc('icon', 'آیکن').renderSlot('icon')); +tbl.add(new Xtc('opt', 'عملیات').noSort().renderSlot('opt')); + +export default tbl; + + diff --git a/src/views/charity/Charity.vue b/src/views/charity/Charity.vue new file mode 100644 index 0000000..45bd420 --- /dev/null +++ b/src/views/charity/Charity.vue @@ -0,0 +1,178 @@ + + + + + diff --git a/src/views/charity/charity.js b/src/views/charity/charity.js new file mode 100644 index 0000000..ad13ab0 --- /dev/null +++ b/src/views/charity/charity.js @@ -0,0 +1,15 @@ +import XTbl, {Xtc} from '../../components/x-table/index'; + +const tbl = new XTbl('/admin/charity/table', 'لیست خیریه ها'); +tbl.add(new Xtc('title', 'نام خیریه').filterText()); +tbl.add(new Xtc('mobile', 'موبایل').filterText()); +tbl.add(new Xtc('phone', 'تلفن').filterNumber()); +tbl.add(new Xtc('established_year', 'سال تاسیس').filterText()); +tbl.add(new Xtc('boss_name', 'نام مدیرعامل').filterText()); +tbl.add(new Xtc('logo', 'لوگو').renderSlot('logo')); +tbl.add(new Xtc('reg_number', 'شماره ثبت').filterText()); +tbl.add(new Xtc('address', 'آدرس خیریه').filterText()); +tbl.add(new Xtc('opt', 'عملیات').renderSlot('opt')); + +export default tbl; + diff --git a/src/views/charity/charityListView.js b/src/views/charity/charityListView.js new file mode 100644 index 0000000..67a6ce0 --- /dev/null +++ b/src/views/charity/charityListView.js @@ -0,0 +1,20 @@ +import XTbl, {Xtc} from '../../components/x-table/index'; +import tbl from "../price/DepositPriceListModel"; + +const setModel = (id)=>{ + const tbl = new XTbl(`/admin/charity/transaction/${id}`, ''); + + tbl.add(new Xtc('amount', 'مبلغ پرداختی').filterNumber()); + tbl.add(new Xtc('note', 'بابت').filterSelect().hidden()); + tbl.add(new Xtc('gateway', 'نام درگاه').filterText()); + tbl.add(new Xtc('track_number', 'شماره پیگیری').filterText()); + tbl.add(new Xtc('reference_id', 'شماره مرجع').filterText()); + tbl.add(new Xtc('customer.mobile', 'واریزکننده').filterText()); + tbl.add(new Xtc('caj', 'زمان').filterDate()); + tbl.add(new Xtc('adv.sts_str', 'وضعیت آگهی').filterSwitch()); + tbl.add(new Xtc('sts_str', 'وضعیت پرداخت').filterSwitch()); + return tbl; +} + +export default setModel + diff --git a/src/views/charts-and-maps/charts/apex-charts/ApexCharts.vue b/src/views/charts-and-maps/charts/apex-charts/ApexCharts.vue new file mode 100644 index 0000000..479ec3d --- /dev/null +++ b/src/views/charts-and-maps/charts/apex-charts/ApexCharts.vue @@ -0,0 +1,161 @@ + + + + + diff --git a/src/views/charts-and-maps/charts/apex-charts/apexChartData.js b/src/views/charts-and-maps/charts/apex-charts/apexChartData.js new file mode 100644 index 0000000..1ea0b16 --- /dev/null +++ b/src/views/charts-and-maps/charts/apex-charts/apexChartData.js @@ -0,0 +1,1513 @@ +/*========================================================================================= + File Name: apexChartData.vue + Description: Data shown by charts + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + + +function generateData (baseval, count, yrange) { + let i = 0 + const series = [] + while (i < count) { + //var x =Math.floor(Math.random() * (750 - 1 + 1)) + 1;; + const y = Math.floor(Math.random() * (yrange.max - yrange.min + 1)) + yrange.min + const z = Math.floor(Math.random() * (75 - 15 + 1)) + 15 + + series.push([baseval, y, z]) + baseval += 86400000 + i++ + } + return series +} + +function generateDataHeatMap (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 themeColors = ['#7367F0', '#28C76F', '#EA5455', '#FF9F43', '#1E1E1E'] + +export default { + lineChartSimple: { + series: [ + { + name: 'Desktops', + data: [10, 41, 35, 51, 49, 62, 69, 91, 148] + } + ], + chartOptions: { + chart: { + height: 350, + zoom: { + enabled: false + } + }, + colors: themeColors, + dataLabels: { + enabled: false + }, + stroke: { + curve: 'straight' + }, + title: { + text: 'Product Trends by Month', + align: 'left' + }, + grid: { + row: { + colors: ['#f3f3f3', 'transparent'], // takes an array which will be repeated on columns + opacity: 0.5 + } + }, + xaxis: { + categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep'] + } + } + }, + lineChartSimpleCode: +` + +`, + lineAreaChartSpline: { + series: [ + { + name: 'series1', + data: [31, 40, 28, 51, 42, 109, 100] + }, + { + name: 'series2', + data: [11, 32, 45, 32, 34, 52, 41] + } + ], + chartOptions: { + dataLabels: { + enabled: false + }, + stroke: { + curve: 'smooth' + }, + colors: themeColors, + xaxis: { + type: 'datetime', + categories: ['2018-09-19T00:00:00', '2018-09-19T01:30:00', '2018-09-19T02:30:00', '2018-09-19T03:30:00', '2018-09-19T04:30:00', '2018-09-19T05:30:00', '2018-09-19T06:30:00'] + }, + tooltip: { + x: { + format: 'dd/MM/yy HH:mm' + } + + } + } + }, + lineAreaChartSplineCode: +` + +`, + columnChart: { + series: [ + { + name: 'Net Profit', + data: [44, 55, 57, 56, 61, 58, 63, 60, 66] + }, + { + name: 'Revenue', + data: [76, 85, 101, 98, 87, 105, 91, 114, 94] + }, + { + name: 'Free Cash Flow', + data: [35, 41, 36, 26, 45, 48, 52, 53, 41] + } + ], + chartOptions: { + colors: themeColors, + plotOptions: { + bar: { + horizontal: false, + endingShape: 'rounded', + columnWidth: '55%' + } + }, + dataLabels: { + enabled: false + }, + stroke: { + show: true, + width: 2, + colors: ['transparent'] + }, + + xaxis: { + categories: ['Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct'] + }, + yaxis: { + title: { + text: '$ (thousands)' + } + }, + fill: { + opacity: 1 + + }, + tooltip: { + y: { + formatter (val) { + return `$ ${val} thousands` + } + } + } + } + }, + columnChartCode: +` + +`, + barChart: { + series: [ + { + data: [400, 430, 448, 470, 540, 580, 690, 1100, 1200, 1380] + } + ], + chartOptions: { + colors: themeColors, + plotOptions: { + bar: { + horizontal: true + } + }, + dataLabels: { + enabled: false + }, + xaxis: { + categories: ['South Korea', 'Canada', 'United Kingdom', 'Netherlands', 'Italy', 'France', 'Japan', 'United States', 'China', 'Germany'] + } + } + }, + barChartCode: +` + +`, + mixedChart: { + series: [ + { + name: 'TEAM A', + type: 'column', + data: [23, 11, 22, 27, 13, 22, 37, 21, 44, 22, 30] + }, + { + name: 'TEAM B', + type: 'area', + data: [44, 55, 41, 67, 22, 43, 21, 41, 56, 27, 43] + }, + { + name: 'TEAM C', + type: 'line', + data: [30, 25, 36, 30, 45, 35, 64, 52, 59, 36, 39] + } + ], + chartOptions: { + colors: themeColors, + chart: { + stacked: false + }, + stroke: { + width: [0, 2, 5], + curve: 'smooth' + }, + plotOptions: { + bar: { + columnWidth: '50%' + } + }, + + fill: { + opacity: [0.85, 0.25, 1], + gradient: { + inverseColors: false, + shade: 'light', + type: 'vertical', + opacityFrom: 0.85, + opacityTo: 0.55, + stops: [0, 100, 100, 100] + } + }, + labels: ['01/01/2003', '02/01/2003', '03/01/2003', '04/01/2003', '05/01/2003', '06/01/2003', '07/01/2003', '08/01/2003', '09/01/2003', '10/01/2003', '11/01/2003'], + markers: { + size: 0 + }, + xaxis: { + type: 'datetime' + }, + yaxis: { + title: { + text: 'Points' + }, + min: 0 + }, + tooltip: { + shared: true, + intersect: false, + y: { + formatter (y) { + if (typeof y !== 'undefined') { + return `${y.toFixed(0)} points` + } + return y + + } + } + } + } + }, + mixedChartCode: +` + +`, + candlestickChart: { + series: [ + { + data: [ + { + x: new Date(1538778600000), + y: [6629.81, 6650.5, 6623.04, 6633.33] + }, + { + x: new Date(1538780400000), + y: [6632.01, 6643.59, 6620, 6630.11] + }, + { + x: new Date(1538782200000), + y: [6630.71, 6648.95, 6623.34, 6635.65] + }, + { + x: new Date(1538784000000), + y: [6635.65, 6651, 6629.67, 6638.24] + }, + { + x: new Date(1538785800000), + y: [6638.24, 6640, 6620, 6624.47] + }, + { + x: new Date(1538787600000), + y: [6624.53, 6636.03, 6621.68, 6624.31] + }, + { + x: new Date(1538789400000), + y: [6624.61, 6632.2, 6617, 6626.02] + }, + { + x: new Date(1538791200000), + y: [6627, 6627.62, 6584.22, 6603.02] + }, + { + x: new Date(1538793000000), + y: [6605, 6608.03, 6598.95, 6604.01] + }, + { + x: new Date(1538794800000), + y: [6604.5, 6614.4, 6602.26, 6608.02] + }, + { + x: new Date(1538796600000), + y: [6608.02, 6610.68, 6601.99, 6608.91] + }, + { + x: new Date(1538798400000), + y: [6608.91, 6618.99, 6608.01, 6612] + }, + { + x: new Date(1538800200000), + y: [6612, 6615.13, 6605.09, 6612] + }, + { + x: new Date(1538802000000), + y: [6612, 6624.12, 6608.43, 6622.95] + }, + { + x: new Date(1538803800000), + y: [6623.91, 6623.91, 6615, 6615.67] + }, + { + x: new Date(1538805600000), + y: [6618.69, 6618.74, 6610, 6610.4] + }, + { + x: new Date(1538807400000), + y: [6611, 6622.78, 6610.4, 6614.9] + }, + { + x: new Date(1538809200000), + y: [6614.9, 6626.2, 6613.33, 6623.45] + }, + { + x: new Date(1538811000000), + y: [6623.48, 6627, 6618.38, 6620.35] + }, + { + x: new Date(1538812800000), + y: [6619.43, 6620.35, 6610.05, 6615.53] + }, + { + x: new Date(1538814600000), + y: [6615.53, 6617.93, 6610, 6615.19] + }, + { + x: new Date(1538816400000), + y: [6615.19, 6621.6, 6608.2, 6620] + }, + { + x: new Date(1538818200000), + y: [6619.54, 6625.17, 6614.15, 6620] + }, + { + x: new Date(1538820000000), + y: [6620.33, 6634.15, 6617.24, 6624.61] + }, + { + x: new Date(1538821800000), + y: [6625.95, 6626, 6611.66, 6617.58] + }, + { + x: new Date(1538823600000), + y: [6619, 6625.97, 6595.27, 6598.86] + }, + { + x: new Date(1538825400000), + y: [6598.86, 6598.88, 6570, 6587.16] + }, + { + x: new Date(1538827200000), + y: [6588.86, 6600, 6580, 6593.4] + }, + { + x: new Date(1538829000000), + y: [6593.99, 6598.89, 6585, 6587.81] + }, + { + x: new Date(1538830800000), + y: [6587.81, 6592.73, 6567.14, 6578] + }, + { + x: new Date(1538832600000), + y: [6578.35, 6581.72, 6567.39, 6579] + }, + { + x: new Date(1538834400000), + y: [6579.38, 6580.92, 6566.77, 6575.96] + }, + { + x: new Date(1538836200000), + y: [6575.96, 6589, 6571.77, 6588.92] + }, + { + x: new Date(1538838000000), + y: [6588.92, 6594, 6577.55, 6589.22] + }, + { + x: new Date(1538839800000), + y: [6589.3, 6598.89, 6589.1, 6596.08] + }, + { + x: new Date(1538841600000), + y: [6597.5, 6600, 6588.39, 6596.25] + }, + { + x: new Date(1538843400000), + y: [6598.03, 6600, 6588.73, 6595.97] + }, + { + x: new Date(1538845200000), + y: [6595.97, 6602.01, 6588.17, 6602] + }, + { + x: new Date(1538847000000), + y: [6602, 6607, 6596.51, 6599.95] + }, + { + x: new Date(1538848800000), + y: [6600.63, 6601.21, 6590.39, 6591.02] + }, + { + x: new Date(1538850600000), + y: [6591.02, 6603.08, 6591, 6591] + }, + { + x: new Date(1538852400000), + y: [6591, 6601.32, 6585, 6592] + }, + { + x: new Date(1538854200000), + y: [6593.13, 6596.01, 6590, 6593.34] + }, + { + x: new Date(1538856000000), + y: [6593.34, 6604.76, 6582.63, 6593.86] + }, + { + x: new Date(1538857800000), + y: [6593.86, 6604.28, 6586.57, 6600.01] + }, + { + x: new Date(1538859600000), + y: [6601.81, 6603.21, 6592.78, 6596.25] + }, + { + x: new Date(1538861400000), + y: [6596.25, 6604.2, 6590, 6602.99] + }, + { + x: new Date(1538863200000), + y: [6602.99, 6606, 6584.99, 6587.81] + }, + { + x: new Date(1538865000000), + y: [6587.81, 6595, 6583.27, 6591.96] + }, + { + x: new Date(1538866800000), + y: [6591.97, 6596.07, 6585, 6588.39] + }, + { + x: new Date(1538868600000), + y: [6587.6, 6598.21, 6587.6, 6594.27] + }, + { + x: new Date(1538870400000), + y: [6596.44, 6601, 6590, 6596.55] + }, + { + x: new Date(1538872200000), + y: [6598.91, 6605, 6596.61, 6600.02] + }, + { + x: new Date(1538874000000), + y: [6600.55, 6605, 6589.14, 6593.01] + }, + { + x: new Date(1538875800000), + y: [6593.15, 6605, 6592, 6603.06] + }, + { + x: new Date(1538877600000), + y: [6603.07, 6604.5, 6599.09, 6603.89] + }, + { + x: new Date(1538879400000), + y: [6604.44, 6604.44, 6600, 6603.5] + }, + { + x: new Date(1538881200000), + y: [6603.5, 6603.99, 6597.5, 6603.86] + }, + { + x: new Date(1538883000000), + y: [6603.85, 6605, 6600, 6604.07] + }, + { + x: new Date(1538884800000), + y: [6604.98, 6606, 6604.07, 6606] + } + ] + } + ], + chartOptions: { + colors: themeColors, + xaxis: { + type: 'datetime' + }, + yaxis: { + tooltip: { + enabled: true + } + } + } + }, + candlestickChartCode: +` + +`, + bubbleChart: { + series: [ + { + name: 'Product1', + data: generateData(new Date('11 Feb 2017 GMT').getTime(), 20, { + min: 10, + max: 60 + }) + }, + { + name: 'Product2', + data: generateData(new Date('11 Feb 2017 GMT').getTime(), 20, { + min: 10, + max: 60 + }) + }, + { + name: 'Product3', + data: generateData(new Date('11 Feb 2017 GMT').getTime(), 20, { + min: 10, + max: 60 + }) + }, + { + name: 'Product4', + data: generateData(new Date('11 Feb 2017 GMT').getTime(), 20, { + min: 10, + max: 60 + }) + } + ], + chartOptions: { + colors: themeColors, + dataLabels: { + enabled: false + }, + fill: { + type: 'gradient' + }, + xaxis: { + tickAmount: 12, + type: 'datetime', + + labels: { + rotate: 0 + } + }, + yaxis: { + max: 70 + }, + theme: { + palette: 'palette2' + } + } + }, + bubbleChartCode: +` + +`, + scatterChart: { + series: [ + { + name: 'SAMPLE A', + data: [[16.4, 5.4], [21.7, 2], [25.4, 3], [19, 2], [10.9, 1], [13.6, 3.2], [10.9, 7.4], [10.9, 0], [10.9, 8.2], [16.4, 0], [16.4, 1.8], [13.6, 0.3], [13.6, 0], [29.9, 0], [27.1, 2.3], [16.4, 0], [13.6, 3.7], [10.9, 5.2], [16.4, 6.5], [10.9, 0], [24.5, 7.1], [10.9, 0], [8.1, 4.7], [19, 0], [21.7, 1.8], [27.1, 0], [24.5, 0], [27.1, 0], [29.9, 1.5], [27.1, 0.8], [22.1, 2]] + }, + { + name: 'SAMPLE B', + data: [[6.4, 13.4], [1.7, 11], [5.4, 8], [9, 17], [1.9, 4], [3.6, 12.2], [1.9, 14.4], [1.9, 9], [1.9, 13.2], [1.4, 7], [6.4, 8.8], [3.6, 4.3], [1.6, 10], [9.9, 2], [7.1, 15], [1.4, 0], [3.6, 13.7], [1.9, 15.2], [6.4, 16.5], [0.9, 10], [4.5, 17.1], [10.9, 10], [0.1, 14.7], [9, 10], [12.7, 11.8], [2.1, 10], [2.5, 10], [27.1, 10], [2.9, 11.5], [7.1, 10.8], [2.1, 12]] + }, + { + name: 'SAMPLE C', + data: [[21.7, 3], [23.6, 3.5], [24.6, 3], [29.9, 3], [21.7, 20], [23, 2], [10.9, 3], [28, 4], [27.1, 0.3], [16.4, 4], [13.6, 0], [19, 5], [22.4, 3], [24.5, 3], [32.6, 3], [27.1, 4], [29.6, 6], [31.6, 8], [21.6, 5], [20.9, 4], [22.4, 0], [32.6, 10.3], [29.7, 20.8], [24.5, 0.8], [21.4, 0], [21.7, 6.9], [28.6, 7.7], [15.4, 0], [18.1, 0], [33.4, 0], [16.4, 0]] + } + ], + chartOptions: { + colors: themeColors, + chart: { + zoom: { + enabled: true, + type: 'xy' + } + }, + xaxis: { + tickAmount: 10 + }, + yaxis: { + tickAmount: 7 + } + } + }, + scatterChartCode: +` + +`, + heatMapChart: { + series: [ + { + name: 'Metric1', + data: generateDataHeatMap(18, { + min: 0, + max: 90 + }) + }, + { + name: 'Metric2', + data: generateDataHeatMap(18, { + min: 0, + max: 90 + }) + }, + { + name: 'Metric3', + data: generateDataHeatMap(18, { + min: 0, + max: 90 + }) + }, + { + name: 'Metric4', + data: generateDataHeatMap(18, { + min: 0, + max: 90 + }) + }, + { + name: 'Metric5', + data: generateDataHeatMap(18, { + min: 0, + max: 90 + }) + }, + { + name: 'Metric6', + data: generateDataHeatMap(18, { + min: 0, + max: 90 + }) + }, + { + name: 'Metric7', + data: generateDataHeatMap(18, { + min: 0, + max: 90 + }) + }, + { + name: 'Metric8', + data: generateDataHeatMap(18, { + min: 0, + max: 90 + }) + }, + { + name: 'Metric9', + data: generateDataHeatMap(18, { + min: 0, + max: 90 + }) + } + ], + chartOptions: { + dataLabels: { + enabled: false + }, + colors: ['#7367F0'] + } + }, + heatMapChartCode: +` + +`, + pieChart: { + series: [44, 55, 13, 43], + chartOptions: { + labels: ['Team A', 'Team B', 'Team C', 'Team D'], + colors: themeColors, + responsive: [ + { + breakpoint: 480, + options: { + chart: { + width: 200 + }, + legend: { + position: 'bottom' + } + } + } + ] + } + }, + pieChartCode: +` + +`, + donutChart: { + series: [44, 55, 41, 17], + chartOptions: { + colors: themeColors, + responsive: [ + { + breakpoint: 480, + options: { + chart: { + width: 200 + }, + legend: { + position: 'bottom' + } + } + } + ] + } + }, + donutChartCode: +` + +`, + radialBarChart: { + series: [44, 55, 67, 83], + chartOptions: { + colors: themeColors, + plotOptions: { + radialBar: { + dataLabels: { + name: { + fontSize: '22px' + }, + value: { + fontSize: '16px' + }, + total: { + show: true, + label: 'Total', + formatter () { + // By default this function returns the average of all series. The below is just an example to show the use of custom formatter function + return 249 + } + } + } + } + }, + labels: ['Apples', 'Oranges', 'Bananas', 'Berries'] + } + }, + radialBarChartCode: +` + +`, + radarChart: { + series: [ + { + name: 'Series 1', + data: [80, 50, 30, 40, 100, 20] + } + ], + chartOptions: { + colors: themeColors, + labels: ['January', 'February', 'March', 'April', 'May', 'June'] + } + }, + radarChartCode: +` + +` +} diff --git a/src/views/charts-and-maps/charts/chartjs/Chartjs.vue b/src/views/charts-and-maps/charts/chartjs/Chartjs.vue new file mode 100644 index 0000000..c323184 --- /dev/null +++ b/src/views/charts-and-maps/charts/chartjs/Chartjs.vue @@ -0,0 +1,70 @@ + + + + + diff --git a/src/views/charts-and-maps/charts/chartjs/ChartjsBarChart.vue b/src/views/charts-and-maps/charts/chartjs/ChartjsBarChart.vue new file mode 100644 index 0000000..9a3be60 --- /dev/null +++ b/src/views/charts-and-maps/charts/chartjs/ChartjsBarChart.vue @@ -0,0 +1,81 @@ + + + + + + diff --git a/src/views/charts-and-maps/charts/chartjs/ChartjsBubbleChart.vue b/src/views/charts-and-maps/charts/chartjs/ChartjsBubbleChart.vue new file mode 100644 index 0000000..0f9cd78 --- /dev/null +++ b/src/views/charts-and-maps/charts/chartjs/ChartjsBubbleChart.vue @@ -0,0 +1,182 @@ + + + + + + diff --git a/src/views/charts-and-maps/charts/chartjs/ChartjsDoughnutChart.vue b/src/views/charts-and-maps/charts/chartjs/ChartjsDoughnutChart.vue new file mode 100644 index 0000000..09fcaca --- /dev/null +++ b/src/views/charts-and-maps/charts/chartjs/ChartjsDoughnutChart.vue @@ -0,0 +1,78 @@ + + + + + + diff --git a/src/views/charts-and-maps/charts/chartjs/ChartjsHorizontalBarChart.vue b/src/views/charts-and-maps/charts/chartjs/ChartjsHorizontalBarChart.vue new file mode 100644 index 0000000..3ed1e51 --- /dev/null +++ b/src/views/charts-and-maps/charts/chartjs/ChartjsHorizontalBarChart.vue @@ -0,0 +1,80 @@ + + + + + + diff --git a/src/views/charts-and-maps/charts/chartjs/ChartjsLineChart.vue b/src/views/charts-and-maps/charts/chartjs/ChartjsLineChart.vue new file mode 100644 index 0000000..d33b6d4 --- /dev/null +++ b/src/views/charts-and-maps/charts/chartjs/ChartjsLineChart.vue @@ -0,0 +1,120 @@ + + + + + + diff --git a/src/views/charts-and-maps/charts/chartjs/ChartjsPieChart.vue b/src/views/charts-and-maps/charts/chartjs/ChartjsPieChart.vue new file mode 100644 index 0000000..1deac75 --- /dev/null +++ b/src/views/charts-and-maps/charts/chartjs/ChartjsPieChart.vue @@ -0,0 +1,78 @@ + + + + + + diff --git a/src/views/charts-and-maps/charts/chartjs/ChartjsPolarAreaChart.vue b/src/views/charts-and-maps/charts/chartjs/ChartjsPolarAreaChart.vue new file mode 100644 index 0000000..38b0f63 --- /dev/null +++ b/src/views/charts-and-maps/charts/chartjs/ChartjsPolarAreaChart.vue @@ -0,0 +1,78 @@ + + + + + + diff --git a/src/views/charts-and-maps/charts/chartjs/ChartjsRadarChart.vue b/src/views/charts-and-maps/charts/chartjs/ChartjsRadarChart.vue new file mode 100644 index 0000000..f114219 --- /dev/null +++ b/src/views/charts-and-maps/charts/chartjs/ChartjsRadarChart.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/views/charts-and-maps/charts/chartjs/ChartjsScatterChart.vue b/src/views/charts-and-maps/charts/chartjs/ChartjsScatterChart.vue new file mode 100644 index 0000000..ed7b1b2 --- /dev/null +++ b/src/views/charts-and-maps/charts/chartjs/ChartjsScatterChart.vue @@ -0,0 +1,246 @@ + + + + + + diff --git a/src/views/charts-and-maps/charts/chartjs/charts-components/ChartjsComponentBarChart.vue b/src/views/charts-and-maps/charts/chartjs/charts-components/ChartjsComponentBarChart.vue new file mode 100644 index 0000000..879b95f --- /dev/null +++ b/src/views/charts-and-maps/charts/chartjs/charts-components/ChartjsComponentBarChart.vue @@ -0,0 +1,30 @@ + + + + diff --git a/src/views/charts-and-maps/charts/chartjs/charts-components/ChartjsComponentBubbleChart.vue b/src/views/charts-and-maps/charts/chartjs/charts-components/ChartjsComponentBubbleChart.vue new file mode 100644 index 0000000..75891c3 --- /dev/null +++ b/src/views/charts-and-maps/charts/chartjs/charts-components/ChartjsComponentBubbleChart.vue @@ -0,0 +1,29 @@ + + + diff --git a/src/views/charts-and-maps/charts/chartjs/charts-components/ChartjsComponentDoughnutChart.vue b/src/views/charts-and-maps/charts/chartjs/charts-components/ChartjsComponentDoughnutChart.vue new file mode 100644 index 0000000..6cd43ee --- /dev/null +++ b/src/views/charts-and-maps/charts/chartjs/charts-components/ChartjsComponentDoughnutChart.vue @@ -0,0 +1,30 @@ + + + + diff --git a/src/views/charts-and-maps/charts/chartjs/charts-components/ChartjsComponentHorizontalBarChart.vue b/src/views/charts-and-maps/charts/chartjs/charts-components/ChartjsComponentHorizontalBarChart.vue new file mode 100644 index 0000000..211574c --- /dev/null +++ b/src/views/charts-and-maps/charts/chartjs/charts-components/ChartjsComponentHorizontalBarChart.vue @@ -0,0 +1,30 @@ + + + + diff --git a/src/views/charts-and-maps/charts/chartjs/charts-components/ChartjsComponentLineChart.vue b/src/views/charts-and-maps/charts/chartjs/charts-components/ChartjsComponentLineChart.vue new file mode 100644 index 0000000..a5be96a --- /dev/null +++ b/src/views/charts-and-maps/charts/chartjs/charts-components/ChartjsComponentLineChart.vue @@ -0,0 +1,30 @@ + + + + diff --git a/src/views/charts-and-maps/charts/chartjs/charts-components/ChartjsComponentPieChart.vue b/src/views/charts-and-maps/charts/chartjs/charts-components/ChartjsComponentPieChart.vue new file mode 100644 index 0000000..a2cb6c5 --- /dev/null +++ b/src/views/charts-and-maps/charts/chartjs/charts-components/ChartjsComponentPieChart.vue @@ -0,0 +1,30 @@ + + + + diff --git a/src/views/charts-and-maps/charts/chartjs/charts-components/ChartjsComponentPolarAreaChart.vue b/src/views/charts-and-maps/charts/chartjs/charts-components/ChartjsComponentPolarAreaChart.vue new file mode 100644 index 0000000..365c913 --- /dev/null +++ b/src/views/charts-and-maps/charts/chartjs/charts-components/ChartjsComponentPolarAreaChart.vue @@ -0,0 +1,30 @@ + + + + diff --git a/src/views/charts-and-maps/charts/chartjs/charts-components/ChartjsComponentRadarChart.vue b/src/views/charts-and-maps/charts/chartjs/charts-components/ChartjsComponentRadarChart.vue new file mode 100644 index 0000000..176f51f --- /dev/null +++ b/src/views/charts-and-maps/charts/chartjs/charts-components/ChartjsComponentRadarChart.vue @@ -0,0 +1,30 @@ + + + + diff --git a/src/views/charts-and-maps/charts/chartjs/charts-components/ChartjsComponentScatterChart.vue b/src/views/charts-and-maps/charts/chartjs/charts-components/ChartjsComponentScatterChart.vue new file mode 100644 index 0000000..a13f8be --- /dev/null +++ b/src/views/charts-and-maps/charts/chartjs/charts-components/ChartjsComponentScatterChart.vue @@ -0,0 +1,30 @@ + + + + diff --git a/src/views/charts-and-maps/charts/echarts/Echarts.vue b/src/views/charts-and-maps/charts/echarts/Echarts.vue new file mode 100644 index 0000000..8993712 --- /dev/null +++ b/src/views/charts-and-maps/charts/echarts/Echarts.vue @@ -0,0 +1,55 @@ + + + + + diff --git a/src/views/charts-and-maps/charts/echarts/EchartsBarChart.vue b/src/views/charts-and-maps/charts/echarts/EchartsBarChart.vue new file mode 100644 index 0000000..46481f9 --- /dev/null +++ b/src/views/charts-and-maps/charts/echarts/EchartsBarChart.vue @@ -0,0 +1,126 @@ + + + + + + diff --git a/src/views/charts-and-maps/charts/echarts/EchartsLineChart.vue b/src/views/charts-and-maps/charts/echarts/EchartsLineChart.vue new file mode 100644 index 0000000..b8bca32 --- /dev/null +++ b/src/views/charts-and-maps/charts/echarts/EchartsLineChart.vue @@ -0,0 +1,181 @@ + + + + + + diff --git a/src/views/charts-and-maps/charts/echarts/EchartsPieChart.vue b/src/views/charts-and-maps/charts/echarts/EchartsPieChart.vue new file mode 100644 index 0000000..73bf9f5 --- /dev/null +++ b/src/views/charts-and-maps/charts/echarts/EchartsPieChart.vue @@ -0,0 +1,172 @@ + + + + + + diff --git a/src/views/charts-and-maps/charts/echarts/EchartsPolarChart.vue b/src/views/charts-and-maps/charts/echarts/EchartsPolarChart.vue new file mode 100644 index 0000000..aef5c1b --- /dev/null +++ b/src/views/charts-and-maps/charts/echarts/EchartsPolarChart.vue @@ -0,0 +1,141 @@ + + + + + + diff --git a/src/views/charts-and-maps/charts/echarts/EchartsRadarChart.vue b/src/views/charts-and-maps/charts/echarts/EchartsRadarChart.vue new file mode 100644 index 0000000..37b3763 --- /dev/null +++ b/src/views/charts-and-maps/charts/echarts/EchartsRadarChart.vue @@ -0,0 +1,96 @@ + + + + + + diff --git a/src/views/charts-and-maps/charts/echarts/EchartsScatterChart.vue b/src/views/charts-and-maps/charts/echarts/EchartsScatterChart.vue new file mode 100644 index 0000000..3a5a31e --- /dev/null +++ b/src/views/charts-and-maps/charts/echarts/EchartsScatterChart.vue @@ -0,0 +1,323 @@ + + + + + + diff --git a/src/views/charts-and-maps/charts/echarts/theme.json b/src/views/charts-and-maps/charts/echarts/theme.json new file mode 100644 index 0000000..f1c3df2 --- /dev/null +++ b/src/views/charts-and-maps/charts/echarts/theme.json @@ -0,0 +1,474 @@ +{ + "color": [ + "#4ea397", + "#22c3aa", + "#7bd9a5" + ], + "backgroundColor": "rgba(0,0,0,0)", + "textStyle": {}, + "title": { + "textStyle": { + "color": "#666666" + }, + "subtextStyle": { + "color": "#999999" + } + }, + "line": { + "itemStyle": { + "normal": { + "borderWidth": "2" + } + }, + "lineStyle": { + "normal": { + "width": "3" + } + }, + "symbolSize": "10", + "symbol": "emptyCircle", + "smooth": false + }, + "radar": { + "itemStyle": { + "normal": { + "borderWidth": "2" + } + }, + "lineStyle": { + "normal": { + "width": "3" + } + }, + "symbolSize": "10", + "symbol": "emptyCircle", + "smooth": true + }, + "bar": { + "itemStyle": { + "normal": { + "barBorderWidth": "0", + "barBorderColor": "#444444" + }, + "emphasis": { + "barBorderWidth": "0", + "barBorderColor": "#444444" + } + } + }, + "pie": { + "itemStyle": { + "normal": { + "borderWidth": "0", + "borderColor": "#444444" + }, + "emphasis": { + "borderWidth": "0", + "borderColor": "#444444" + } + } + }, + "scatter": { + "itemStyle": { + "normal": { + "borderWidth": "0", + "borderColor": "#444444" + }, + "emphasis": { + "borderWidth": "0", + "borderColor": "#444444" + } + } + }, + "boxplot": { + "itemStyle": { + "normal": { + "borderWidth": "0", + "borderColor": "#444444" + }, + "emphasis": { + "borderWidth": "0", + "borderColor": "#444444" + } + } + }, + "parallel": { + "itemStyle": { + "normal": { + "borderWidth": "0", + "borderColor": "#444444" + }, + "emphasis": { + "borderWidth": "0", + "borderColor": "#444444" + } + } + }, + "sankey": { + "itemStyle": { + "normal": { + "borderWidth": "0", + "borderColor": "#444444" + }, + "emphasis": { + "borderWidth": "0", + "borderColor": "#444444" + } + } + }, + "funnel": { + "itemStyle": { + "normal": { + "borderWidth": "0", + "borderColor": "#444444" + }, + "emphasis": { + "borderWidth": "0", + "borderColor": "#444444" + } + } + }, + "gauge": { + "itemStyle": { + "normal": { + "borderWidth": "0", + "borderColor": "#444444" + }, + "emphasis": { + "borderWidth": "0", + "borderColor": "#444444" + } + } + }, + "candlestick": { + "itemStyle": { + "normal": { + "color": "#d0648a", + "color0": "#ffffff", + "borderColor": "#d0648a", + "borderColor0": "#22c3aa", + "borderWidth": 1 + } + } + }, + "graph": { + "itemStyle": { + "normal": { + "borderWidth": "0", + "borderColor": "#444444" + } + }, + "lineStyle": { + "normal": { + "width": 1, + "color": "#aaa" + } + }, + "symbolSize": "10", + "symbol": "emptyCircle", + "smooth": true, + "color": [ + "#4ea397", + "#22c3aa", + "#7bd9a5" + ], + "label": { + "normal": { + "textStyle": { + "color": "#ffffff" + } + } + } + }, + "map": { + "itemStyle": { + "normal": { + "areaColor": "#eeeeee", + "borderColor": "#999999", + "borderWidth": "0.5" + }, + "emphasis": { + "areaColor": "rgba(34,195,170,0.25)", + "borderColor": "#22c3aa", + "borderWidth": "0.5" + } + }, + "label": { + "normal": { + "textStyle": { + "color": "#28544e" + } + }, + "emphasis": { + "textStyle": { + "color": "rgb(52,158,142)" + } + } + } + }, + "geo": { + "itemStyle": { + "normal": { + "areaColor": "#eeeeee", + "borderColor": "#999999", + "borderWidth": "0.5" + }, + "emphasis": { + "areaColor": "rgba(34,195,170,0.25)", + "borderColor": "#22c3aa", + "borderWidth": "0.5" + } + }, + "label": { + "normal": { + "textStyle": { + "color": "#28544e" + } + }, + "emphasis": { + "textStyle": { + "color": "rgb(52,158,142)" + } + } + } + }, + "categoryAxis": { + "axisLine": { + "show": true, + "lineStyle": { + "color": "#cccccc" + } + }, + "axisTick": { + "show": false, + "lineStyle": { + "color": "#333333" + } + }, + "axisLabel": { + "show": true, + "textStyle": { + "color": "#999999" + } + }, + "splitLine": { + "show": true, + "lineStyle": { + "color": [ + "#eeeeee" + ] + } + }, + "splitArea": { + "show": false, + "areaStyle": { + "color": [ + "rgba(250,250,250,0.3)", + "rgba(200,200,200,0.3)" + ] + } + } + }, + "valueAxis": { + "axisLine": { + "show": true, + "lineStyle": { + "color": "#cccccc" + } + }, + "axisTick": { + "show": false, + "lineStyle": { + "color": "#333333" + } + }, + "axisLabel": { + "show": true, + "textStyle": { + "color": "#999999" + } + }, + "splitLine": { + "show": true, + "lineStyle": { + "color": [ + "#eeeeee" + ] + } + }, + "splitArea": { + "show": false, + "areaStyle": { + "color": [ + "rgba(250,250,250,0.3)", + "rgba(200,200,200,0.3)" + ] + } + } + }, + "logAxis": { + "axisLine": { + "show": true, + "lineStyle": { + "color": "#cccccc" + } + }, + "axisTick": { + "show": false, + "lineStyle": { + "color": "#333333" + } + }, + "axisLabel": { + "show": true, + "textStyle": { + "color": "#999999" + } + }, + "splitLine": { + "show": true, + "lineStyle": { + "color": [ + "#eeeeee" + ] + } + }, + "splitArea": { + "show": false, + "areaStyle": { + "color": [ + "rgba(250,250,250,0.3)", + "rgba(200,200,200,0.3)" + ] + } + } + }, + "timeAxis": { + "axisLine": { + "show": true, + "lineStyle": { + "color": "#cccccc" + } + }, + "axisTick": { + "show": false, + "lineStyle": { + "color": "#333333" + } + }, + "axisLabel": { + "show": true, + "textStyle": { + "color": "#999999" + } + }, + "splitLine": { + "show": true, + "lineStyle": { + "color": [ + "#eeeeee" + ] + } + }, + "splitArea": { + "show": false, + "areaStyle": { + "color": [ + "rgba(250,250,250,0.3)", + "rgba(200,200,200,0.3)" + ] + } + } + }, + "toolbox": { + "iconStyle": { + "normal": { + "borderColor": "#aaaaaa" + }, + "emphasis": { + "borderColor": "#666" + } + } + }, + "legend": { + "textStyle": { + "color": "#999999" + } + }, + "tooltip": { + "axisPointer": { + "lineStyle": { + "color": "#ccc", + "width": 1 + }, + "crossStyle": { + "color": "#ccc", + "width": 1 + } + } + }, + "timeline": { + "lineStyle": { + "color": "#349e8e", + "width": 1 + }, + "itemStyle": { + "normal": { + "color": "#349e8e", + "borderWidth": "1" + }, + "emphasis": { + "color": "#57e8d2" + } + }, + "controlStyle": { + "normal": { + "color": "#349e8e", + "borderColor": "#349e8e", + "borderWidth": "0" + } + }, + "checkpointStyle": { + "color": "#22c3aa", + "borderColor": "rgba(34,195,170,0.25)" + }, + "label": { + "normal": { + "textStyle": { + "color": "#349e8e" + } + } + } + }, + "visualMap": { + "color": [ + "#d0648a", + "#22c3aa", + "rgba(123,217,165,0.2)" + ] + }, + "dataZoom": { + "backgroundColor": "#fff", + "dataBackgroundColor": "#dedede", + "fillerColor": "rgba(34,195,170,0.25)", + "handleColor": "#dddddd", + "handleSize": "100%", + "textStyle": { + "color": "#999" + } + }, + "markPoint": { + "label": { + "normal": { + "textStyle": { + "color": "#ffffff" + } + }, + "emphasis": { + "textStyle": { + "color": "#ffffff" + } + } + } + } +} \ No newline at end of file diff --git a/src/views/charts-and-maps/maps/google-map/GoogleMap.vue b/src/views/charts-and-maps/maps/google-map/GoogleMap.vue new file mode 100644 index 0000000..446ffc0 --- /dev/null +++ b/src/views/charts-and-maps/maps/google-map/GoogleMap.vue @@ -0,0 +1,36 @@ + + + + + diff --git a/src/views/charts-and-maps/maps/google-map/GoogleMapBasic.vue b/src/views/charts-and-maps/maps/google-map/GoogleMapBasic.vue new file mode 100644 index 0000000..9288063 --- /dev/null +++ b/src/views/charts-and-maps/maps/google-map/GoogleMapBasic.vue @@ -0,0 +1,82 @@ + + + + + + diff --git a/src/views/charts-and-maps/maps/google-map/GoogleMapInfoWindow.vue b/src/views/charts-and-maps/maps/google-map/GoogleMapInfoWindow.vue new file mode 100644 index 0000000..22e3b6d --- /dev/null +++ b/src/views/charts-and-maps/maps/google-map/GoogleMapInfoWindow.vue @@ -0,0 +1,114 @@ + + + + + + diff --git a/src/views/charts-and-maps/maps/google-map/GoogleMapStreetView.vue b/src/views/charts-and-maps/maps/google-map/GoogleMapStreetView.vue new file mode 100644 index 0000000..a50b781 --- /dev/null +++ b/src/views/charts-and-maps/maps/google-map/GoogleMapStreetView.vue @@ -0,0 +1,96 @@ + + + + + + diff --git a/src/views/components/extra-components/I18n.vue b/src/views/components/extra-components/I18n.vue new file mode 100644 index 0000000..abed14b --- /dev/null +++ b/src/views/components/extra-components/I18n.vue @@ -0,0 +1,53 @@ + + + + + + diff --git a/src/views/components/extra-components/access-control/AccessControl.vue b/src/views/components/extra-components/access-control/AccessControl.vue new file mode 100644 index 0000000..3f79699 --- /dev/null +++ b/src/views/components/extra-components/access-control/AccessControl.vue @@ -0,0 +1,111 @@ + + + diff --git a/src/views/components/extra-components/autocomplete/Autocomplete.vue b/src/views/components/extra-components/autocomplete/Autocomplete.vue new file mode 100644 index 0000000..92c3a2e --- /dev/null +++ b/src/views/components/extra-components/autocomplete/Autocomplete.vue @@ -0,0 +1,338 @@ + + + + + + + diff --git a/src/views/components/extra-components/carousel/Carousel.vue b/src/views/components/extra-components/carousel/Carousel.vue new file mode 100644 index 0000000..fa7ffdd --- /dev/null +++ b/src/views/components/extra-components/carousel/Carousel.vue @@ -0,0 +1,66 @@ + + + + + diff --git a/src/views/components/extra-components/carousel/Carousel3dCoverflowEffect.vue b/src/views/components/extra-components/carousel/Carousel3dCoverflowEffect.vue new file mode 100644 index 0000000..1848612 --- /dev/null +++ b/src/views/components/extra-components/carousel/Carousel3dCoverflowEffect.vue @@ -0,0 +1,174 @@ + + + + + + + + diff --git a/src/views/components/extra-components/carousel/Carousel3dEffect.vue b/src/views/components/extra-components/carousel/Carousel3dEffect.vue new file mode 100644 index 0000000..efe4799 --- /dev/null +++ b/src/views/components/extra-components/carousel/Carousel3dEffect.vue @@ -0,0 +1,180 @@ + + + + + + + + diff --git a/src/views/components/extra-components/carousel/CarouselAutoplay.vue b/src/views/components/extra-components/carousel/CarouselAutoplay.vue new file mode 100644 index 0000000..1c01358 --- /dev/null +++ b/src/views/components/extra-components/carousel/CarouselAutoplay.vue @@ -0,0 +1,119 @@ + + + + + + diff --git a/src/views/components/extra-components/carousel/CarouselDefault.vue b/src/views/components/extra-components/carousel/CarouselDefault.vue new file mode 100644 index 0000000..fb632e8 --- /dev/null +++ b/src/views/components/extra-components/carousel/CarouselDefault.vue @@ -0,0 +1,74 @@ + + + + + + diff --git a/src/views/components/extra-components/carousel/CarouselEffectFade.vue b/src/views/components/extra-components/carousel/CarouselEffectFade.vue new file mode 100644 index 0000000..124066e --- /dev/null +++ b/src/views/components/extra-components/carousel/CarouselEffectFade.vue @@ -0,0 +1,110 @@ + + + + + + diff --git a/src/views/components/extra-components/carousel/CarouselGallery.vue b/src/views/components/extra-components/carousel/CarouselGallery.vue new file mode 100644 index 0000000..2fd4804 --- /dev/null +++ b/src/views/components/extra-components/carousel/CarouselGallery.vue @@ -0,0 +1,214 @@ + + + + + + + + + diff --git a/src/views/components/extra-components/carousel/CarouselLazyLoading.vue b/src/views/components/extra-components/carousel/CarouselLazyLoading.vue new file mode 100644 index 0000000..cba70c5 --- /dev/null +++ b/src/views/components/extra-components/carousel/CarouselLazyLoading.vue @@ -0,0 +1,157 @@ + + + + + + + + diff --git a/src/views/components/extra-components/carousel/CarouselMultiRowSlidesLayout.vue b/src/views/components/extra-components/carousel/CarouselMultiRowSlidesLayout.vue new file mode 100644 index 0000000..95c6300 --- /dev/null +++ b/src/views/components/extra-components/carousel/CarouselMultiRowSlidesLayout.vue @@ -0,0 +1,185 @@ + + + + + + diff --git a/src/views/components/extra-components/carousel/CarouselMultipleSlidesPerView.vue b/src/views/components/extra-components/carousel/CarouselMultipleSlidesPerView.vue new file mode 100644 index 0000000..5c9cf80 --- /dev/null +++ b/src/views/components/extra-components/carousel/CarouselMultipleSlidesPerView.vue @@ -0,0 +1,135 @@ + + + + + + diff --git a/src/views/components/extra-components/carousel/CarouselNavigation.vue b/src/views/components/extra-components/carousel/CarouselNavigation.vue new file mode 100644 index 0000000..fcc0533 --- /dev/null +++ b/src/views/components/extra-components/carousel/CarouselNavigation.vue @@ -0,0 +1,98 @@ + + + + + + diff --git a/src/views/components/extra-components/carousel/CarouselPagination.vue b/src/views/components/extra-components/carousel/CarouselPagination.vue new file mode 100644 index 0000000..ce8975f --- /dev/null +++ b/src/views/components/extra-components/carousel/CarouselPagination.vue @@ -0,0 +1,96 @@ + + + + + + + diff --git a/src/views/components/extra-components/carousel/CarouselParallax.vue b/src/views/components/extra-components/carousel/CarouselParallax.vue new file mode 100644 index 0000000..acaaecb --- /dev/null +++ b/src/views/components/extra-components/carousel/CarouselParallax.vue @@ -0,0 +1,210 @@ + + + + + + + + diff --git a/src/views/components/extra-components/carousel/CarouselProgress.vue b/src/views/components/extra-components/carousel/CarouselProgress.vue new file mode 100644 index 0000000..b01fe93 --- /dev/null +++ b/src/views/components/extra-components/carousel/CarouselProgress.vue @@ -0,0 +1,108 @@ + + + + + + diff --git a/src/views/components/extra-components/carousel/CarouselResponsiveBreakpoints.vue b/src/views/components/extra-components/carousel/CarouselResponsiveBreakpoints.vue new file mode 100644 index 0000000..2481f9b --- /dev/null +++ b/src/views/components/extra-components/carousel/CarouselResponsiveBreakpoints.vue @@ -0,0 +1,167 @@ + + + + + + diff --git a/src/views/components/extra-components/carousel/CarouselVirtualSlides.vue b/src/views/components/extra-components/carousel/CarouselVirtualSlides.vue new file mode 100644 index 0000000..f3077dc --- /dev/null +++ b/src/views/components/extra-components/carousel/CarouselVirtualSlides.vue @@ -0,0 +1,206 @@ + + + + + + + + diff --git a/src/views/components/extra-components/clipboard/Clipboard.vue b/src/views/components/extra-components/clipboard/Clipboard.vue new file mode 100644 index 0000000..69f6f8b --- /dev/null +++ b/src/views/components/extra-components/clipboard/Clipboard.vue @@ -0,0 +1,28 @@ + + + + + + diff --git a/src/views/components/extra-components/clipboard/ClipboardDirective.vue b/src/views/components/extra-components/clipboard/ClipboardDirective.vue new file mode 100644 index 0000000..fc13cf7 --- /dev/null +++ b/src/views/components/extra-components/clipboard/ClipboardDirective.vue @@ -0,0 +1,95 @@ + + + + + diff --git a/src/views/components/extra-components/clipboard/ClipboardWithoutDirective.vue b/src/views/components/extra-components/clipboard/ClipboardWithoutDirective.vue new file mode 100644 index 0000000..82e203d --- /dev/null +++ b/src/views/components/extra-components/clipboard/ClipboardWithoutDirective.vue @@ -0,0 +1,89 @@ + + + + + diff --git a/src/views/components/extra-components/context-menu/ContextMenu.vue b/src/views/components/extra-components/context-menu/ContextMenu.vue new file mode 100644 index 0000000..567ab31 --- /dev/null +++ b/src/views/components/extra-components/context-menu/ContextMenu.vue @@ -0,0 +1,27 @@ + + + + + diff --git a/src/views/components/extra-components/context-menu/ContextMenuClickNotClose.vue b/src/views/components/extra-components/context-menu/ContextMenuClickNotClose.vue new file mode 100644 index 0000000..401acfc --- /dev/null +++ b/src/views/components/extra-components/context-menu/ContextMenuClickNotClose.vue @@ -0,0 +1,127 @@ + + + + + diff --git a/src/views/components/extra-components/context-menu/ContextMenuSimple.vue b/src/views/components/extra-components/context-menu/ContextMenuSimple.vue new file mode 100644 index 0000000..a314f49 --- /dev/null +++ b/src/views/components/extra-components/context-menu/ContextMenuSimple.vue @@ -0,0 +1,125 @@ + + + + + diff --git a/src/views/components/extra-components/datepicker/Datepicker.vue b/src/views/components/extra-components/datepicker/Datepicker.vue new file mode 100644 index 0000000..f605dc0 --- /dev/null +++ b/src/views/components/extra-components/datepicker/Datepicker.vue @@ -0,0 +1,101 @@ + + + + + diff --git a/src/views/components/extra-components/datepicker/DatepickerDateMonthViewOnly.vue b/src/views/components/extra-components/datepicker/DatepickerDateMonthViewOnly.vue new file mode 100644 index 0000000..73bd6af --- /dev/null +++ b/src/views/components/extra-components/datepicker/DatepickerDateMonthViewOnly.vue @@ -0,0 +1,45 @@ + + + + + + diff --git a/src/views/components/extra-components/datepicker/DatepickerDayViewOnly.vue b/src/views/components/extra-components/datepicker/DatepickerDayViewOnly.vue new file mode 100644 index 0000000..3e4f9a5 --- /dev/null +++ b/src/views/components/extra-components/datepicker/DatepickerDayViewOnly.vue @@ -0,0 +1,45 @@ + + + + + + diff --git a/src/views/components/extra-components/datepicker/DatepickerDefault.vue b/src/views/components/extra-components/datepicker/DatepickerDefault.vue new file mode 100644 index 0000000..4e50401 --- /dev/null +++ b/src/views/components/extra-components/datepicker/DatepickerDefault.vue @@ -0,0 +1,56 @@ + + + + + + diff --git a/src/views/components/extra-components/datepicker/DatepickerFormat.vue b/src/views/components/extra-components/datepicker/DatepickerFormat.vue new file mode 100644 index 0000000..043e7b6 --- /dev/null +++ b/src/views/components/extra-components/datepicker/DatepickerFormat.vue @@ -0,0 +1,75 @@ + + + + + + diff --git a/src/views/components/extra-components/datepicker/DatepickerHighlightDates.vue b/src/views/components/extra-components/datepicker/DatepickerHighlightDates.vue new file mode 100644 index 0000000..bf16346 --- /dev/null +++ b/src/views/components/extra-components/datepicker/DatepickerHighlightDates.vue @@ -0,0 +1,67 @@ + + + + + + diff --git a/src/views/components/extra-components/datepicker/DatepickerInline.vue b/src/views/components/extra-components/datepicker/DatepickerInline.vue new file mode 100644 index 0000000..9643075 --- /dev/null +++ b/src/views/components/extra-components/datepicker/DatepickerInline.vue @@ -0,0 +1,45 @@ + + + + + + diff --git a/src/views/components/extra-components/datepicker/DatepickerMinMaxDateRange.vue b/src/views/components/extra-components/datepicker/DatepickerMinMaxDateRange.vue new file mode 100644 index 0000000..16aaea4 --- /dev/null +++ b/src/views/components/extra-components/datepicker/DatepickerMinMaxDateRange.vue @@ -0,0 +1,63 @@ + + + + + + diff --git a/src/views/components/extra-components/datepicker/DatepickerMonthViewOnly.vue b/src/views/components/extra-components/datepicker/DatepickerMonthViewOnly.vue new file mode 100644 index 0000000..c7f85c5 --- /dev/null +++ b/src/views/components/extra-components/datepicker/DatepickerMonthViewOnly.vue @@ -0,0 +1,45 @@ + + + + + + diff --git a/src/views/components/extra-components/datepicker/DatepickerMonthYearViewOnly.vue b/src/views/components/extra-components/datepicker/DatepickerMonthYearViewOnly.vue new file mode 100644 index 0000000..e789e53 --- /dev/null +++ b/src/views/components/extra-components/datepicker/DatepickerMonthYearViewOnly.vue @@ -0,0 +1,45 @@ + + + + + + diff --git a/src/views/components/extra-components/datepicker/DatepickerOpenProgramatically.vue b/src/views/components/extra-components/datepicker/DatepickerOpenProgramatically.vue new file mode 100644 index 0000000..e531d47 --- /dev/null +++ b/src/views/components/extra-components/datepicker/DatepickerOpenProgramatically.vue @@ -0,0 +1,47 @@ + + + + + + diff --git a/src/views/components/extra-components/datepicker/DatepickerRtl.vue b/src/views/components/extra-components/datepicker/DatepickerRtl.vue new file mode 100644 index 0000000..105871f --- /dev/null +++ b/src/views/components/extra-components/datepicker/DatepickerRtl.vue @@ -0,0 +1,57 @@ + + + + + + diff --git a/src/views/components/extra-components/datepicker/DatepickerTranslation.vue b/src/views/components/extra-components/datepicker/DatepickerTranslation.vue new file mode 100644 index 0000000..db5b4b7 --- /dev/null +++ b/src/views/components/extra-components/datepicker/DatepickerTranslation.vue @@ -0,0 +1,65 @@ + + + + + + diff --git a/src/views/components/extra-components/datetime-picker/DatetimePicker.vue b/src/views/components/extra-components/datetime-picker/DatetimePicker.vue new file mode 100644 index 0000000..617603e --- /dev/null +++ b/src/views/components/extra-components/datetime-picker/DatetimePicker.vue @@ -0,0 +1,61 @@ + + + + + diff --git a/src/views/components/extra-components/datetime-picker/DatetimePickerBasic.vue b/src/views/components/extra-components/datetime-picker/DatetimePickerBasic.vue new file mode 100644 index 0000000..f525e14 --- /dev/null +++ b/src/views/components/extra-components/datetime-picker/DatetimePickerBasic.vue @@ -0,0 +1,58 @@ + + + + + + diff --git a/src/views/components/extra-components/datetime-picker/DatetimePickerDatetime.vue b/src/views/components/extra-components/datetime-picker/DatetimePickerDatetime.vue new file mode 100644 index 0000000..fa3a50b --- /dev/null +++ b/src/views/components/extra-components/datetime-picker/DatetimePickerDatetime.vue @@ -0,0 +1,66 @@ + + + + + + diff --git a/src/views/components/extra-components/datetime-picker/DatetimePickerInline.vue b/src/views/components/extra-components/datetime-picker/DatetimePickerInline.vue new file mode 100644 index 0000000..f1f3ecf --- /dev/null +++ b/src/views/components/extra-components/datetime-picker/DatetimePickerInline.vue @@ -0,0 +1,63 @@ + + + + + + diff --git a/src/views/components/extra-components/datetime-picker/DatetimePickerInput.vue b/src/views/components/extra-components/datetime-picker/DatetimePickerInput.vue new file mode 100644 index 0000000..6654246 --- /dev/null +++ b/src/views/components/extra-components/datetime-picker/DatetimePickerInput.vue @@ -0,0 +1,63 @@ + + + + + + diff --git a/src/views/components/extra-components/datetime-picker/DatetimePickerLocale.vue b/src/views/components/extra-components/datetime-picker/DatetimePickerLocale.vue new file mode 100644 index 0000000..ec9a4ab --- /dev/null +++ b/src/views/components/extra-components/datetime-picker/DatetimePickerLocale.vue @@ -0,0 +1,66 @@ + + + + + + diff --git a/src/views/components/extra-components/datetime-picker/DatetimePickerStartEnd.vue b/src/views/components/extra-components/datetime-picker/DatetimePickerStartEnd.vue new file mode 100644 index 0000000..e8efb51 --- /dev/null +++ b/src/views/components/extra-components/datetime-picker/DatetimePickerStartEnd.vue @@ -0,0 +1,95 @@ + + + + + + diff --git a/src/views/components/extra-components/datetime-picker/DatetimePickerTime.vue b/src/views/components/extra-components/datetime-picker/DatetimePickerTime.vue new file mode 100644 index 0000000..35faee1 --- /dev/null +++ b/src/views/components/extra-components/datetime-picker/DatetimePickerTime.vue @@ -0,0 +1,68 @@ + + + + + + diff --git a/src/views/components/extra-components/drag-and-drop/DragAndDrop.vue b/src/views/components/extra-components/drag-and-drop/DragAndDrop.vue new file mode 100644 index 0000000..d7c22fb --- /dev/null +++ b/src/views/components/extra-components/drag-and-drop/DragAndDrop.vue @@ -0,0 +1,36 @@ + + + + + diff --git a/src/views/components/extra-components/drag-and-drop/DragAndDropAnimation.vue b/src/views/components/extra-components/drag-and-drop/DragAndDropAnimation.vue new file mode 100644 index 0000000..90e6152 --- /dev/null +++ b/src/views/components/extra-components/drag-and-drop/DragAndDropAnimation.vue @@ -0,0 +1,152 @@ + + + + + + + + diff --git a/src/views/components/extra-components/drag-and-drop/DragAndDropCloneList.vue b/src/views/components/extra-components/drag-and-drop/DragAndDropCloneList.vue new file mode 100644 index 0000000..b1cb668 --- /dev/null +++ b/src/views/components/extra-components/drag-and-drop/DragAndDropCloneList.vue @@ -0,0 +1,96 @@ + + + + + + diff --git a/src/views/components/extra-components/drag-and-drop/DragAndDropMultipleLists.vue b/src/views/components/extra-components/drag-and-drop/DragAndDropMultipleLists.vue new file mode 100644 index 0000000..27fe238 --- /dev/null +++ b/src/views/components/extra-components/drag-and-drop/DragAndDropMultipleLists.vue @@ -0,0 +1,178 @@ + + + + + + diff --git a/src/views/components/extra-components/drag-and-drop/DragAndDropSimple.vue b/src/views/components/extra-components/drag-and-drop/DragAndDropSimple.vue new file mode 100644 index 0000000..c5f0656 --- /dev/null +++ b/src/views/components/extra-components/drag-and-drop/DragAndDropSimple.vue @@ -0,0 +1,81 @@ + + + + + + diff --git a/src/views/components/extra-components/import-export/Export.vue b/src/views/components/extra-components/import-export/Export.vue new file mode 100644 index 0000000..1be3c13 --- /dev/null +++ b/src/views/components/extra-components/import-export/Export.vue @@ -0,0 +1,164 @@ + + + diff --git a/src/views/components/extra-components/import-export/ExportSelected.vue b/src/views/components/extra-components/import-export/ExportSelected.vue new file mode 100644 index 0000000..ae38487 --- /dev/null +++ b/src/views/components/extra-components/import-export/ExportSelected.vue @@ -0,0 +1,165 @@ + + + diff --git a/src/views/components/extra-components/import-export/Import.vue b/src/views/components/extra-components/import-export/Import.vue new file mode 100644 index 0000000..f312e01 --- /dev/null +++ b/src/views/components/extra-components/import-export/Import.vue @@ -0,0 +1,59 @@ + + + + + diff --git a/src/views/components/extra-components/query-select/QuerySelect.vue b/src/views/components/extra-components/query-select/QuerySelect.vue new file mode 100644 index 0000000..8625e5b --- /dev/null +++ b/src/views/components/extra-components/query-select/QuerySelect.vue @@ -0,0 +1,73 @@ + + + diff --git a/src/views/components/extra-components/quill-editor/QuillEditor.vue b/src/views/components/extra-components/quill-editor/QuillEditor.vue new file mode 100644 index 0000000..7945cba --- /dev/null +++ b/src/views/components/extra-components/quill-editor/QuillEditor.vue @@ -0,0 +1,33 @@ + + + + + diff --git a/src/views/components/extra-components/quill-editor/QuillEditorCustomToolbar.vue b/src/views/components/extra-components/quill-editor/QuillEditorCustomToolbar.vue new file mode 100644 index 0000000..8eb3cc7 --- /dev/null +++ b/src/views/components/extra-components/quill-editor/QuillEditorCustomToolbar.vue @@ -0,0 +1,157 @@ + + + + + + diff --git a/src/views/components/extra-components/quill-editor/QuillEditorThemeBubble.vue b/src/views/components/extra-components/quill-editor/QuillEditorThemeBubble.vue new file mode 100644 index 0000000..e06bf25 --- /dev/null +++ b/src/views/components/extra-components/quill-editor/QuillEditorThemeBubble.vue @@ -0,0 +1,77 @@ + + + + + + diff --git a/src/views/components/extra-components/quill-editor/QuillEditorThemeSnow.vue b/src/views/components/extra-components/quill-editor/QuillEditorThemeSnow.vue new file mode 100644 index 0000000..1a12dd5 --- /dev/null +++ b/src/views/components/extra-components/quill-editor/QuillEditorThemeSnow.vue @@ -0,0 +1,71 @@ + + + + + + diff --git a/src/views/components/extra-components/select/Select.vue b/src/views/components/extra-components/select/Select.vue new file mode 100644 index 0000000..f338622 --- /dev/null +++ b/src/views/components/extra-components/select/Select.vue @@ -0,0 +1,29 @@ + + + + + diff --git a/src/views/components/extra-components/select/SelectDropdownOptions.vue b/src/views/components/extra-components/select/SelectDropdownOptions.vue new file mode 100644 index 0000000..6e87f47 --- /dev/null +++ b/src/views/components/extra-components/select/SelectDropdownOptions.vue @@ -0,0 +1,37 @@ + + + + + + diff --git a/src/views/components/extra-components/select/SelectSelectingValues.vue b/src/views/components/extra-components/select/SelectSelectingValues.vue new file mode 100644 index 0000000..8c33ecc --- /dev/null +++ b/src/views/components/extra-components/select/SelectSelectingValues.vue @@ -0,0 +1,35 @@ + + + + + + diff --git a/src/views/components/extra-components/select/dropdown-options/DropdownOptionsBasic.vue b/src/views/components/extra-components/select/dropdown-options/DropdownOptionsBasic.vue new file mode 100644 index 0000000..54a794e --- /dev/null +++ b/src/views/components/extra-components/select/dropdown-options/DropdownOptionsBasic.vue @@ -0,0 +1,48 @@ + + + + + diff --git a/src/views/components/extra-components/select/dropdown-options/DropdownOptionsOptionLabels.vue b/src/views/components/extra-components/select/dropdown-options/DropdownOptionsOptionLabels.vue new file mode 100644 index 0000000..0f3e8c6 --- /dev/null +++ b/src/views/components/extra-components/select/dropdown-options/DropdownOptionsOptionLabels.vue @@ -0,0 +1,82 @@ + + + + + diff --git a/src/views/components/extra-components/select/selecting-values/SelectingValuesDefault.vue b/src/views/components/extra-components/select/selecting-values/SelectingValuesDefault.vue new file mode 100644 index 0000000..916ce3e --- /dev/null +++ b/src/views/components/extra-components/select/selecting-values/SelectingValuesDefault.vue @@ -0,0 +1,78 @@ + + + + + + diff --git a/src/views/components/extra-components/select/selecting-values/SelectingValuesSingleMultipleSelection.vue b/src/views/components/extra-components/select/selecting-values/SelectingValuesSingleMultipleSelection.vue new file mode 100644 index 0000000..a531007 --- /dev/null +++ b/src/views/components/extra-components/select/selecting-values/SelectingValuesSingleMultipleSelection.vue @@ -0,0 +1,60 @@ + + + + + + diff --git a/src/views/components/extra-components/select/selecting-values/SelectingValuesTagging.vue b/src/views/components/extra-components/select/selecting-values/SelectingValuesTagging.vue new file mode 100644 index 0000000..1429e30 --- /dev/null +++ b/src/views/components/extra-components/select/selecting-values/SelectingValuesTagging.vue @@ -0,0 +1,67 @@ + + + + + + diff --git a/src/views/components/extra-components/star-ratings/StarRatings.vue b/src/views/components/extra-components/star-ratings/StarRatings.vue new file mode 100644 index 0000000..a4dd0d5 --- /dev/null +++ b/src/views/components/extra-components/star-ratings/StarRatings.vue @@ -0,0 +1,355 @@ + + + + + diff --git a/src/views/components/extra-components/tree/Tree.vue b/src/views/components/extra-components/tree/Tree.vue new file mode 100644 index 0000000..71a3189 --- /dev/null +++ b/src/views/components/extra-components/tree/Tree.vue @@ -0,0 +1,29 @@ + + + + diff --git a/src/views/components/extra-components/tree/TreeAsyncTree.vue b/src/views/components/extra-components/tree/TreeAsyncTree.vue new file mode 100644 index 0000000..5e03944 --- /dev/null +++ b/src/views/components/extra-components/tree/TreeAsyncTree.vue @@ -0,0 +1,95 @@ + + + diff --git a/src/views/components/extra-components/tree/TreeDropdown.vue b/src/views/components/extra-components/tree/TreeDropdown.vue new file mode 100644 index 0000000..eeac1d5 --- /dev/null +++ b/src/views/components/extra-components/tree/TreeDropdown.vue @@ -0,0 +1,123 @@ + + + + + diff --git a/src/views/components/extra-components/tree/TreeSearchTree.vue b/src/views/components/extra-components/tree/TreeSearchTree.vue new file mode 100644 index 0000000..a98db12 --- /dev/null +++ b/src/views/components/extra-components/tree/TreeSearchTree.vue @@ -0,0 +1,183 @@ + + + + + diff --git a/src/views/components/vuesax/alert/Alert.vue b/src/views/components/vuesax/alert/Alert.vue new file mode 100644 index 0000000..433ce96 --- /dev/null +++ b/src/views/components/vuesax/alert/Alert.vue @@ -0,0 +1,40 @@ + + + + + + diff --git a/src/views/components/vuesax/alert/AlertClosable.vue b/src/views/components/vuesax/alert/AlertClosable.vue new file mode 100644 index 0000000..c51bd2b --- /dev/null +++ b/src/views/components/vuesax/alert/AlertClosable.vue @@ -0,0 +1,56 @@ + + + + + + diff --git a/src/views/components/vuesax/alert/AlertColor.vue b/src/views/components/vuesax/alert/AlertColor.vue new file mode 100644 index 0000000..99876f0 --- /dev/null +++ b/src/views/components/vuesax/alert/AlertColor.vue @@ -0,0 +1,71 @@ + + + + diff --git a/src/views/components/vuesax/alert/AlertDefault.vue b/src/views/components/vuesax/alert/AlertDefault.vue new file mode 100644 index 0000000..59c961e --- /dev/null +++ b/src/views/components/vuesax/alert/AlertDefault.vue @@ -0,0 +1,27 @@ + + + + diff --git a/src/views/components/vuesax/alert/AlertExample.vue b/src/views/components/vuesax/alert/AlertExample.vue new file mode 100644 index 0000000..3a2c89f --- /dev/null +++ b/src/views/components/vuesax/alert/AlertExample.vue @@ -0,0 +1,68 @@ + + + + + diff --git a/src/views/components/vuesax/alert/AlertIcon.vue b/src/views/components/vuesax/alert/AlertIcon.vue new file mode 100644 index 0000000..5a8e3f1 --- /dev/null +++ b/src/views/components/vuesax/alert/AlertIcon.vue @@ -0,0 +1,27 @@ + + + + diff --git a/src/views/components/vuesax/alert/AlertTitle.vue b/src/views/components/vuesax/alert/AlertTitle.vue new file mode 100644 index 0000000..c0a0ae8 --- /dev/null +++ b/src/views/components/vuesax/alert/AlertTitle.vue @@ -0,0 +1,27 @@ + + + + diff --git a/src/views/components/vuesax/avatar/Avatar.vue b/src/views/components/vuesax/avatar/Avatar.vue new file mode 100644 index 0000000..b9e5ced --- /dev/null +++ b/src/views/components/vuesax/avatar/Avatar.vue @@ -0,0 +1,37 @@ + + + + + + diff --git a/src/views/components/vuesax/avatar/AvatarColor.vue b/src/views/components/vuesax/avatar/AvatarColor.vue new file mode 100644 index 0000000..f99be92 --- /dev/null +++ b/src/views/components/vuesax/avatar/AvatarColor.vue @@ -0,0 +1,45 @@ + + + + diff --git a/src/views/components/vuesax/avatar/AvatarDefault.vue b/src/views/components/vuesax/avatar/AvatarDefault.vue new file mode 100644 index 0000000..465b4fd --- /dev/null +++ b/src/views/components/vuesax/avatar/AvatarDefault.vue @@ -0,0 +1,38 @@ + + + + diff --git a/src/views/components/vuesax/avatar/AvatarIcon.vue b/src/views/components/vuesax/avatar/AvatarIcon.vue new file mode 100644 index 0000000..aba2287 --- /dev/null +++ b/src/views/components/vuesax/avatar/AvatarIcon.vue @@ -0,0 +1,48 @@ + + + + diff --git a/src/views/components/vuesax/avatar/AvatarSize.vue b/src/views/components/vuesax/avatar/AvatarSize.vue new file mode 100644 index 0000000..4c5315e --- /dev/null +++ b/src/views/components/vuesax/avatar/AvatarSize.vue @@ -0,0 +1,38 @@ + + + + diff --git a/src/views/components/vuesax/avatar/AvatarWithBadge.vue b/src/views/components/vuesax/avatar/AvatarWithBadge.vue new file mode 100644 index 0000000..dd3d894 --- /dev/null +++ b/src/views/components/vuesax/avatar/AvatarWithBadge.vue @@ -0,0 +1,70 @@ + + + + + + diff --git a/src/views/components/vuesax/breadcrumb/Breadcrumb.vue b/src/views/components/vuesax/breadcrumb/Breadcrumb.vue new file mode 100644 index 0000000..7881d0e --- /dev/null +++ b/src/views/components/vuesax/breadcrumb/Breadcrumb.vue @@ -0,0 +1,37 @@ + + + + + + diff --git a/src/views/components/vuesax/breadcrumb/BreadcrumbAlignment.vue b/src/views/components/vuesax/breadcrumb/BreadcrumbAlignment.vue new file mode 100644 index 0000000..ca581f6 --- /dev/null +++ b/src/views/components/vuesax/breadcrumb/BreadcrumbAlignment.vue @@ -0,0 +1,57 @@ + + + + + + diff --git a/src/views/components/vuesax/breadcrumb/BreadcrumbColor.vue b/src/views/components/vuesax/breadcrumb/BreadcrumbColor.vue new file mode 100644 index 0000000..3f557d5 --- /dev/null +++ b/src/views/components/vuesax/breadcrumb/BreadcrumbColor.vue @@ -0,0 +1,92 @@ + + + + + + diff --git a/src/views/components/vuesax/breadcrumb/BreadcrumbDefault.vue b/src/views/components/vuesax/breadcrumb/BreadcrumbDefault.vue new file mode 100644 index 0000000..414db9f --- /dev/null +++ b/src/views/components/vuesax/breadcrumb/BreadcrumbDefault.vue @@ -0,0 +1,55 @@ + + + + diff --git a/src/views/components/vuesax/breadcrumb/BreadcrumbSeparator.vue b/src/views/components/vuesax/breadcrumb/BreadcrumbSeparator.vue new file mode 100644 index 0000000..c45ec6b --- /dev/null +++ b/src/views/components/vuesax/breadcrumb/BreadcrumbSeparator.vue @@ -0,0 +1,63 @@ + + + + + + diff --git a/src/views/components/vuesax/breadcrumb/BreadcrumbSlot.vue b/src/views/components/vuesax/breadcrumb/BreadcrumbSlot.vue new file mode 100644 index 0000000..fc80d19 --- /dev/null +++ b/src/views/components/vuesax/breadcrumb/BreadcrumbSlot.vue @@ -0,0 +1,35 @@ + + + + diff --git a/src/views/components/vuesax/button-group/ButtonGroup.vue b/src/views/components/vuesax/button-group/ButtonGroup.vue new file mode 100644 index 0000000..79446d8 --- /dev/null +++ b/src/views/components/vuesax/button-group/ButtonGroup.vue @@ -0,0 +1,35 @@ + + + + + + diff --git a/src/views/components/vuesax/button-group/ButtonGroupBasic.vue b/src/views/components/vuesax/button-group/ButtonGroupBasic.vue new file mode 100644 index 0000000..f7efc37 --- /dev/null +++ b/src/views/components/vuesax/button-group/ButtonGroupBasic.vue @@ -0,0 +1,31 @@ + + + + + diff --git a/src/views/components/vuesax/button-group/ButtonGroupSize.vue b/src/views/components/vuesax/button-group/ButtonGroupSize.vue new file mode 100644 index 0000000..288ca3b --- /dev/null +++ b/src/views/components/vuesax/button-group/ButtonGroupSize.vue @@ -0,0 +1,55 @@ + + + + + diff --git a/src/views/components/vuesax/button-group/ButtonGroupToolbar.vue b/src/views/components/vuesax/button-group/ButtonGroupToolbar.vue new file mode 100644 index 0000000..2f7776d --- /dev/null +++ b/src/views/components/vuesax/button-group/ButtonGroupToolbar.vue @@ -0,0 +1,57 @@ + + + + + diff --git a/src/views/components/vuesax/button-group/ButtonGroupVertical.vue b/src/views/components/vuesax/button-group/ButtonGroupVertical.vue new file mode 100644 index 0000000..5efdc6c --- /dev/null +++ b/src/views/components/vuesax/button-group/ButtonGroupVertical.vue @@ -0,0 +1,31 @@ + + + + + diff --git a/src/views/components/vuesax/button/Button.vue b/src/views/components/vuesax/button/Button.vue new file mode 100644 index 0000000..fa4307f --- /dev/null +++ b/src/views/components/vuesax/button/Button.vue @@ -0,0 +1,61 @@ + + + + + + diff --git a/src/views/components/vuesax/button/ButtonBorder.vue b/src/views/components/vuesax/button/ButtonBorder.vue new file mode 100644 index 0000000..ae4b888 --- /dev/null +++ b/src/views/components/vuesax/button/ButtonBorder.vue @@ -0,0 +1,39 @@ + + + + diff --git a/src/views/components/vuesax/button/ButtonColor.vue b/src/views/components/vuesax/button/ButtonColor.vue new file mode 100644 index 0000000..824249c --- /dev/null +++ b/src/views/components/vuesax/button/ButtonColor.vue @@ -0,0 +1,75 @@ + + + + + + diff --git a/src/views/components/vuesax/button/ButtonFilled.vue b/src/views/components/vuesax/button/ButtonFilled.vue new file mode 100644 index 0000000..8c30779 --- /dev/null +++ b/src/views/components/vuesax/button/ButtonFilled.vue @@ -0,0 +1,38 @@ + + + + diff --git a/src/views/components/vuesax/button/ButtonFlat.vue b/src/views/components/vuesax/button/ButtonFlat.vue new file mode 100644 index 0000000..9eae053 --- /dev/null +++ b/src/views/components/vuesax/button/ButtonFlat.vue @@ -0,0 +1,39 @@ + + + + diff --git a/src/views/components/vuesax/button/ButtonGradient.vue b/src/views/components/vuesax/button/ButtonGradient.vue new file mode 100644 index 0000000..2552cd1 --- /dev/null +++ b/src/views/components/vuesax/button/ButtonGradient.vue @@ -0,0 +1,39 @@ + + + + diff --git a/src/views/components/vuesax/button/ButtonIcon.vue b/src/views/components/vuesax/button/ButtonIcon.vue new file mode 100644 index 0000000..f2d8bbe --- /dev/null +++ b/src/views/components/vuesax/button/ButtonIcon.vue @@ -0,0 +1,45 @@ + + + + diff --git a/src/views/components/vuesax/button/ButtonIconOnly.vue b/src/views/components/vuesax/button/ButtonIconOnly.vue new file mode 100644 index 0000000..87b8a34 --- /dev/null +++ b/src/views/components/vuesax/button/ButtonIconOnly.vue @@ -0,0 +1,54 @@ + + + + diff --git a/src/views/components/vuesax/button/ButtonLineDown.vue b/src/views/components/vuesax/button/ButtonLineDown.vue new file mode 100644 index 0000000..9e7d3f0 --- /dev/null +++ b/src/views/components/vuesax/button/ButtonLineDown.vue @@ -0,0 +1,41 @@ + + + + diff --git a/src/views/components/vuesax/button/ButtonLink.vue b/src/views/components/vuesax/button/ButtonLink.vue new file mode 100644 index 0000000..a8cf955 --- /dev/null +++ b/src/views/components/vuesax/button/ButtonLink.vue @@ -0,0 +1,35 @@ + + + + diff --git a/src/views/components/vuesax/button/ButtonRelief.vue b/src/views/components/vuesax/button/ButtonRelief.vue new file mode 100644 index 0000000..9091621 --- /dev/null +++ b/src/views/components/vuesax/button/ButtonRelief.vue @@ -0,0 +1,39 @@ + + + + diff --git a/src/views/components/vuesax/button/ButtonRouter.vue b/src/views/components/vuesax/button/ButtonRouter.vue new file mode 100644 index 0000000..c88096b --- /dev/null +++ b/src/views/components/vuesax/button/ButtonRouter.vue @@ -0,0 +1,33 @@ + + + + diff --git a/src/views/components/vuesax/button/ButtonSize.vue b/src/views/components/vuesax/button/ButtonSize.vue new file mode 100644 index 0000000..2834c30 --- /dev/null +++ b/src/views/components/vuesax/button/ButtonSize.vue @@ -0,0 +1,31 @@ + + + + diff --git a/src/views/components/vuesax/button/ButtonTextColor.vue b/src/views/components/vuesax/button/ButtonTextColor.vue new file mode 100644 index 0000000..c474819 --- /dev/null +++ b/src/views/components/vuesax/button/ButtonTextColor.vue @@ -0,0 +1,39 @@ + + + + diff --git a/src/views/components/vuesax/chip/Chip.vue b/src/views/components/vuesax/chip/Chip.vue new file mode 100644 index 0000000..123f512 --- /dev/null +++ b/src/views/components/vuesax/chip/Chip.vue @@ -0,0 +1,44 @@ + + + + + + diff --git a/src/views/components/vuesax/chip/ChipAddRemove.vue b/src/views/components/vuesax/chip/ChipAddRemove.vue new file mode 100644 index 0000000..0f02e16 --- /dev/null +++ b/src/views/components/vuesax/chip/ChipAddRemove.vue @@ -0,0 +1,89 @@ + + + + + + diff --git a/src/views/components/vuesax/chip/ChipClosable.vue b/src/views/components/vuesax/chip/ChipClosable.vue new file mode 100644 index 0000000..7021437 --- /dev/null +++ b/src/views/components/vuesax/chip/ChipClosable.vue @@ -0,0 +1,95 @@ + + + + + + diff --git a/src/views/components/vuesax/chip/ChipColor.vue b/src/views/components/vuesax/chip/ChipColor.vue new file mode 100644 index 0000000..50e2265 --- /dev/null +++ b/src/views/components/vuesax/chip/ChipColor.vue @@ -0,0 +1,103 @@ + + + + + + diff --git a/src/views/components/vuesax/chip/ChipCustomizeCloseClearChipIcon.vue b/src/views/components/vuesax/chip/ChipCustomizeCloseClearChipIcon.vue new file mode 100644 index 0000000..ca3ca45 --- /dev/null +++ b/src/views/components/vuesax/chip/ChipCustomizeCloseClearChipIcon.vue @@ -0,0 +1,99 @@ + + + + + + diff --git a/src/views/components/vuesax/chip/ChipDefault.vue b/src/views/components/vuesax/chip/ChipDefault.vue new file mode 100644 index 0000000..357215d --- /dev/null +++ b/src/views/components/vuesax/chip/ChipDefault.vue @@ -0,0 +1,86 @@ + + + + + + diff --git a/src/views/components/vuesax/chip/ChipIcon.vue b/src/views/components/vuesax/chip/ChipIcon.vue new file mode 100644 index 0000000..77422be --- /dev/null +++ b/src/views/components/vuesax/chip/ChipIcon.vue @@ -0,0 +1,81 @@ + + + + diff --git a/src/views/components/vuesax/chip/ChipTransparent.vue b/src/views/components/vuesax/chip/ChipTransparent.vue new file mode 100644 index 0000000..3e1b109 --- /dev/null +++ b/src/views/components/vuesax/chip/ChipTransparent.vue @@ -0,0 +1,72 @@ + + + diff --git a/src/views/components/vuesax/collapse/Collapse.vue b/src/views/components/vuesax/collapse/Collapse.vue new file mode 100644 index 0000000..060c4a5 --- /dev/null +++ b/src/views/components/vuesax/collapse/Collapse.vue @@ -0,0 +1,37 @@ + + + + + + diff --git a/src/views/components/vuesax/collapse/CollapseAccordion.vue b/src/views/components/vuesax/collapse/CollapseAccordion.vue new file mode 100644 index 0000000..fb556c3 --- /dev/null +++ b/src/views/components/vuesax/collapse/CollapseAccordion.vue @@ -0,0 +1,94 @@ + + + + diff --git a/src/views/components/vuesax/collapse/CollapseChangeArrowIcon.vue b/src/views/components/vuesax/collapse/CollapseChangeArrowIcon.vue new file mode 100644 index 0000000..1c49275 --- /dev/null +++ b/src/views/components/vuesax/collapse/CollapseChangeArrowIcon.vue @@ -0,0 +1,99 @@ + + + + diff --git a/src/views/components/vuesax/collapse/CollapseDefault.vue b/src/views/components/vuesax/collapse/CollapseDefault.vue new file mode 100644 index 0000000..1716fbd --- /dev/null +++ b/src/views/components/vuesax/collapse/CollapseDefault.vue @@ -0,0 +1,94 @@ + + + + diff --git a/src/views/components/vuesax/collapse/CollapseOpenHover.vue b/src/views/components/vuesax/collapse/CollapseOpenHover.vue new file mode 100644 index 0000000..7dbf05e --- /dev/null +++ b/src/views/components/vuesax/collapse/CollapseOpenHover.vue @@ -0,0 +1,85 @@ + + + + diff --git a/src/views/components/vuesax/collapse/CollapseType.vue b/src/views/components/vuesax/collapse/CollapseType.vue new file mode 100644 index 0000000..1a11af6 --- /dev/null +++ b/src/views/components/vuesax/collapse/CollapseType.vue @@ -0,0 +1,125 @@ + + + + + + diff --git a/src/views/components/vuesax/dialogs/Dialogs.vue b/src/views/components/vuesax/dialogs/Dialogs.vue new file mode 100644 index 0000000..396bb9c --- /dev/null +++ b/src/views/components/vuesax/dialogs/Dialogs.vue @@ -0,0 +1,31 @@ + + + + + + diff --git a/src/views/components/vuesax/dialogs/DialogsAlert.vue b/src/views/components/vuesax/dialogs/DialogsAlert.vue new file mode 100644 index 0000000..ce8238a --- /dev/null +++ b/src/views/components/vuesax/dialogs/DialogsAlert.vue @@ -0,0 +1,105 @@ + + + + + + diff --git a/src/views/components/vuesax/dialogs/DialogsConfirm.vue b/src/views/components/vuesax/dialogs/DialogsConfirm.vue new file mode 100644 index 0000000..ad7c62e --- /dev/null +++ b/src/views/components/vuesax/dialogs/DialogsConfirm.vue @@ -0,0 +1,83 @@ + + + + + + diff --git a/src/views/components/vuesax/dialogs/DialogsPrompt.vue b/src/views/components/vuesax/dialogs/DialogsPrompt.vue new file mode 100644 index 0000000..948f695 --- /dev/null +++ b/src/views/components/vuesax/dialogs/DialogsPrompt.vue @@ -0,0 +1,185 @@ + + + + + + diff --git a/src/views/components/vuesax/divider/Divider.vue b/src/views/components/vuesax/divider/Divider.vue new file mode 100644 index 0000000..d727bf6 --- /dev/null +++ b/src/views/components/vuesax/divider/Divider.vue @@ -0,0 +1,40 @@ + + + + + + diff --git a/src/views/components/vuesax/divider/DividerColor.vue b/src/views/components/vuesax/divider/DividerColor.vue new file mode 100644 index 0000000..a8afee8 --- /dev/null +++ b/src/views/components/vuesax/divider/DividerColor.vue @@ -0,0 +1,52 @@ + + + + diff --git a/src/views/components/vuesax/divider/DividerDefault.vue b/src/views/components/vuesax/divider/DividerDefault.vue new file mode 100644 index 0000000..8e1eefc --- /dev/null +++ b/src/views/components/vuesax/divider/DividerDefault.vue @@ -0,0 +1,31 @@ + + + + diff --git a/src/views/components/vuesax/divider/DividerIcon.vue b/src/views/components/vuesax/divider/DividerIcon.vue new file mode 100644 index 0000000..92371ee --- /dev/null +++ b/src/views/components/vuesax/divider/DividerIcon.vue @@ -0,0 +1,47 @@ + + + + diff --git a/src/views/components/vuesax/divider/DividerStyle.vue b/src/views/components/vuesax/divider/DividerStyle.vue new file mode 100644 index 0000000..9042db7 --- /dev/null +++ b/src/views/components/vuesax/divider/DividerStyle.vue @@ -0,0 +1,47 @@ + + + + + + diff --git a/src/views/components/vuesax/divider/DividerText.vue b/src/views/components/vuesax/divider/DividerText.vue new file mode 100644 index 0000000..f0db5e8 --- /dev/null +++ b/src/views/components/vuesax/divider/DividerText.vue @@ -0,0 +1,31 @@ + + + + diff --git a/src/views/components/vuesax/divider/DividerTextPosition.vue b/src/views/components/vuesax/divider/DividerTextPosition.vue new file mode 100644 index 0000000..6cf232f --- /dev/null +++ b/src/views/components/vuesax/divider/DividerTextPosition.vue @@ -0,0 +1,40 @@ + + + + diff --git a/src/views/components/vuesax/dropdown/Dropdown.vue b/src/views/components/vuesax/dropdown/Dropdown.vue new file mode 100644 index 0000000..07f8451 --- /dev/null +++ b/src/views/components/vuesax/dropdown/Dropdown.vue @@ -0,0 +1,41 @@ + + + + + + + + diff --git a/src/views/components/vuesax/dropdown/DropdownButton.vue b/src/views/components/vuesax/dropdown/DropdownButton.vue new file mode 100644 index 0000000..e94f4c2 --- /dev/null +++ b/src/views/components/vuesax/dropdown/DropdownButton.vue @@ -0,0 +1,203 @@ + + + + + + diff --git a/src/views/components/vuesax/dropdown/DropdownColor.vue b/src/views/components/vuesax/dropdown/DropdownColor.vue new file mode 100644 index 0000000..5baff44 --- /dev/null +++ b/src/views/components/vuesax/dropdown/DropdownColor.vue @@ -0,0 +1,97 @@ + + + + + + diff --git a/src/views/components/vuesax/dropdown/DropdownCustomContent.vue b/src/views/components/vuesax/dropdown/DropdownCustomContent.vue new file mode 100644 index 0000000..b03bd3c --- /dev/null +++ b/src/views/components/vuesax/dropdown/DropdownCustomContent.vue @@ -0,0 +1,81 @@ + + + + + + diff --git a/src/views/components/vuesax/dropdown/DropdownDefault.vue b/src/views/components/vuesax/dropdown/DropdownDefault.vue new file mode 100644 index 0000000..841bb6e --- /dev/null +++ b/src/views/components/vuesax/dropdown/DropdownDefault.vue @@ -0,0 +1,143 @@ + + + + + + diff --git a/src/views/components/vuesax/dropdown/DropdownGroupOption.vue b/src/views/components/vuesax/dropdown/DropdownGroupOption.vue new file mode 100644 index 0000000..6ef5089 --- /dev/null +++ b/src/views/components/vuesax/dropdown/DropdownGroupOption.vue @@ -0,0 +1,40 @@ + + + + + + diff --git a/src/views/components/vuesax/dropdown/dropdownGroupOption/DropdownGroupCollapse.vue b/src/views/components/vuesax/dropdown/dropdownGroupOption/DropdownGroupCollapse.vue new file mode 100644 index 0000000..55d69e4 --- /dev/null +++ b/src/views/components/vuesax/dropdown/dropdownGroupOption/DropdownGroupCollapse.vue @@ -0,0 +1,94 @@ + + + + diff --git a/src/views/components/vuesax/dropdown/dropdownGroupOption/DropdownOptionGroup.vue b/src/views/components/vuesax/dropdown/dropdownGroupOption/DropdownOptionGroup.vue new file mode 100644 index 0000000..0241f57 --- /dev/null +++ b/src/views/components/vuesax/dropdown/dropdownGroupOption/DropdownOptionGroup.vue @@ -0,0 +1,83 @@ + + + + diff --git a/src/views/components/vuesax/list/List.vue b/src/views/components/vuesax/list/List.vue new file mode 100644 index 0000000..3f61989 --- /dev/null +++ b/src/views/components/vuesax/list/List.vue @@ -0,0 +1,37 @@ + + + + + + diff --git a/src/views/components/vuesax/list/ListAvatar.vue b/src/views/components/vuesax/list/ListAvatar.vue new file mode 100644 index 0000000..4c20370 --- /dev/null +++ b/src/views/components/vuesax/list/ListAvatar.vue @@ -0,0 +1,76 @@ + + + + diff --git a/src/views/components/vuesax/list/ListBasic.vue b/src/views/components/vuesax/list/ListBasic.vue new file mode 100644 index 0000000..628ccbf --- /dev/null +++ b/src/views/components/vuesax/list/ListBasic.vue @@ -0,0 +1,37 @@ + + + + diff --git a/src/views/components/vuesax/list/ListContent.vue b/src/views/components/vuesax/list/ListContent.vue new file mode 100644 index 0000000..9bac5a3 --- /dev/null +++ b/src/views/components/vuesax/list/ListContent.vue @@ -0,0 +1,75 @@ + + + + + + diff --git a/src/views/components/vuesax/list/ListHeader.vue b/src/views/components/vuesax/list/ListHeader.vue new file mode 100644 index 0000000..1f58fd1 --- /dev/null +++ b/src/views/components/vuesax/list/ListHeader.vue @@ -0,0 +1,43 @@ + + + + diff --git a/src/views/components/vuesax/list/ListIcon.vue b/src/views/components/vuesax/list/ListIcon.vue new file mode 100644 index 0000000..d69992b --- /dev/null +++ b/src/views/components/vuesax/list/ListIcon.vue @@ -0,0 +1,50 @@ + + + + diff --git a/src/views/components/vuesax/loading/Loading.vue b/src/views/components/vuesax/loading/Loading.vue new file mode 100644 index 0000000..3c52b54 --- /dev/null +++ b/src/views/components/vuesax/loading/Loading.vue @@ -0,0 +1,41 @@ + + + + + + + + diff --git a/src/views/components/vuesax/loading/LoadingBackground.vue b/src/views/components/vuesax/loading/LoadingBackground.vue new file mode 100644 index 0000000..54ed073 --- /dev/null +++ b/src/views/components/vuesax/loading/LoadingBackground.vue @@ -0,0 +1,73 @@ + + + + + + diff --git a/src/views/components/vuesax/loading/LoadingColor.vue b/src/views/components/vuesax/loading/LoadingColor.vue new file mode 100644 index 0000000..59550cd --- /dev/null +++ b/src/views/components/vuesax/loading/LoadingColor.vue @@ -0,0 +1,69 @@ + + + + + + diff --git a/src/views/components/vuesax/loading/LoadingContained.vue b/src/views/components/vuesax/loading/LoadingContained.vue new file mode 100644 index 0000000..a7f01c9 --- /dev/null +++ b/src/views/components/vuesax/loading/LoadingContained.vue @@ -0,0 +1,112 @@ + + + + + + diff --git a/src/views/components/vuesax/loading/LoadingDefault.vue b/src/views/components/vuesax/loading/LoadingDefault.vue new file mode 100644 index 0000000..67854e0 --- /dev/null +++ b/src/views/components/vuesax/loading/LoadingDefault.vue @@ -0,0 +1,59 @@ + + + + + + diff --git a/src/views/components/vuesax/loading/LoadingType.vue b/src/views/components/vuesax/loading/LoadingType.vue new file mode 100644 index 0000000..3f9c917 --- /dev/null +++ b/src/views/components/vuesax/loading/LoadingType.vue @@ -0,0 +1,151 @@ + + + + + + diff --git a/src/views/components/vuesax/navbar/Navbar.vue b/src/views/components/vuesax/navbar/Navbar.vue new file mode 100644 index 0000000..bf52b0e --- /dev/null +++ b/src/views/components/vuesax/navbar/Navbar.vue @@ -0,0 +1,37 @@ + + + + + + diff --git a/src/views/components/vuesax/navbar/NavbarCollapse.vue b/src/views/components/vuesax/navbar/NavbarCollapse.vue new file mode 100644 index 0000000..f2b39ca --- /dev/null +++ b/src/views/components/vuesax/navbar/NavbarCollapse.vue @@ -0,0 +1,79 @@ + + + + + + diff --git a/src/views/components/vuesax/navbar/NavbarColor.vue b/src/views/components/vuesax/navbar/NavbarColor.vue new file mode 100644 index 0000000..6330d6d --- /dev/null +++ b/src/views/components/vuesax/navbar/NavbarColor.vue @@ -0,0 +1,109 @@ + + + + + + diff --git a/src/views/components/vuesax/navbar/NavbarDefault.vue b/src/views/components/vuesax/navbar/NavbarDefault.vue new file mode 100644 index 0000000..01b9a7b --- /dev/null +++ b/src/views/components/vuesax/navbar/NavbarDefault.vue @@ -0,0 +1,79 @@ + + + + + + diff --git a/src/views/components/vuesax/navbar/NavbarInput.vue b/src/views/components/vuesax/navbar/NavbarInput.vue new file mode 100644 index 0000000..b6c686b --- /dev/null +++ b/src/views/components/vuesax/navbar/NavbarInput.vue @@ -0,0 +1,85 @@ + + + + + + diff --git a/src/views/components/vuesax/navbar/NavbarType.vue b/src/views/components/vuesax/navbar/NavbarType.vue new file mode 100644 index 0000000..92786fd --- /dev/null +++ b/src/views/components/vuesax/navbar/NavbarType.vue @@ -0,0 +1,145 @@ + + + + + + diff --git a/src/views/components/vuesax/notifications/Notifications.vue b/src/views/components/vuesax/notifications/Notifications.vue new file mode 100644 index 0000000..cdfccb6 --- /dev/null +++ b/src/views/components/vuesax/notifications/Notifications.vue @@ -0,0 +1,40 @@ + + + + + + diff --git a/src/views/components/vuesax/notifications/NotificationsDefault.vue b/src/views/components/vuesax/notifications/NotificationsDefault.vue new file mode 100644 index 0000000..392b2cd --- /dev/null +++ b/src/views/components/vuesax/notifications/NotificationsDefault.vue @@ -0,0 +1,150 @@ + + + + + + diff --git a/src/views/components/vuesax/notifications/NotificationsFixedAndFunctionClick.vue b/src/views/components/vuesax/notifications/NotificationsFixedAndFunctionClick.vue new file mode 100644 index 0000000..05b1319 --- /dev/null +++ b/src/views/components/vuesax/notifications/NotificationsFixedAndFunctionClick.vue @@ -0,0 +1,75 @@ + + + + + + diff --git a/src/views/components/vuesax/notifications/NotificationsIcon.vue b/src/views/components/vuesax/notifications/NotificationsIcon.vue new file mode 100644 index 0000000..526926d --- /dev/null +++ b/src/views/components/vuesax/notifications/NotificationsIcon.vue @@ -0,0 +1,146 @@ + + + + + + diff --git a/src/views/components/vuesax/notifications/NotificationsPosition.vue b/src/views/components/vuesax/notifications/NotificationsPosition.vue new file mode 100644 index 0000000..11c453c --- /dev/null +++ b/src/views/components/vuesax/notifications/NotificationsPosition.vue @@ -0,0 +1,153 @@ + + + + + + diff --git a/src/views/components/vuesax/notifications/NotificationsTime.vue b/src/views/components/vuesax/notifications/NotificationsTime.vue new file mode 100644 index 0000000..fcf2fcb --- /dev/null +++ b/src/views/components/vuesax/notifications/NotificationsTime.vue @@ -0,0 +1,82 @@ + + + + diff --git a/src/views/components/vuesax/pagination/Pagination.vue b/src/views/components/vuesax/pagination/Pagination.vue new file mode 100644 index 0000000..fed22ba --- /dev/null +++ b/src/views/components/vuesax/pagination/Pagination.vue @@ -0,0 +1,40 @@ + + + + + + diff --git a/src/views/components/vuesax/pagination/PaginationColor.vue b/src/views/components/vuesax/pagination/PaginationColor.vue new file mode 100644 index 0000000..0e5b60c --- /dev/null +++ b/src/views/components/vuesax/pagination/PaginationColor.vue @@ -0,0 +1,53 @@ + + + + + + diff --git a/src/views/components/vuesax/pagination/PaginationDefault.vue b/src/views/components/vuesax/pagination/PaginationDefault.vue new file mode 100644 index 0000000..2812328 --- /dev/null +++ b/src/views/components/vuesax/pagination/PaginationDefault.vue @@ -0,0 +1,43 @@ + + + + + + diff --git a/src/views/components/vuesax/pagination/PaginationGoTo.vue b/src/views/components/vuesax/pagination/PaginationGoTo.vue new file mode 100644 index 0000000..d7f59d3 --- /dev/null +++ b/src/views/components/vuesax/pagination/PaginationGoTo.vue @@ -0,0 +1,47 @@ + + + + + + diff --git a/src/views/components/vuesax/pagination/PaginationIcon.vue b/src/views/components/vuesax/pagination/PaginationIcon.vue new file mode 100644 index 0000000..7da29ae --- /dev/null +++ b/src/views/components/vuesax/pagination/PaginationIcon.vue @@ -0,0 +1,56 @@ + + + + + + diff --git a/src/views/components/vuesax/pagination/PaginationLinksLimit.vue b/src/views/components/vuesax/pagination/PaginationLinksLimit.vue new file mode 100644 index 0000000..88de37b --- /dev/null +++ b/src/views/components/vuesax/pagination/PaginationLinksLimit.vue @@ -0,0 +1,51 @@ + + + + + + diff --git a/src/views/components/vuesax/pagination/PaginationProgrammaticIncDec.vue b/src/views/components/vuesax/pagination/PaginationProgrammaticIncDec.vue new file mode 100644 index 0000000..b14cb3b --- /dev/null +++ b/src/views/components/vuesax/pagination/PaginationProgrammaticIncDec.vue @@ -0,0 +1,46 @@ + + + + + + + diff --git a/src/views/components/vuesax/popup/Popup.vue b/src/views/components/vuesax/popup/Popup.vue new file mode 100644 index 0000000..95dfa19 --- /dev/null +++ b/src/views/components/vuesax/popup/Popup.vue @@ -0,0 +1,34 @@ + + + + + + diff --git a/src/views/components/vuesax/popup/PopupBackground.vue b/src/views/components/vuesax/popup/PopupBackground.vue new file mode 100644 index 0000000..004303f --- /dev/null +++ b/src/views/components/vuesax/popup/PopupBackground.vue @@ -0,0 +1,62 @@ + + + + + + diff --git a/src/views/components/vuesax/popup/PopupDefault.vue b/src/views/components/vuesax/popup/PopupDefault.vue new file mode 100644 index 0000000..5bf72ee --- /dev/null +++ b/src/views/components/vuesax/popup/PopupDefault.vue @@ -0,0 +1,59 @@ + + + + + + diff --git a/src/views/components/vuesax/popup/PopupFullscreen.vue b/src/views/components/vuesax/popup/PopupFullscreen.vue new file mode 100644 index 0000000..03e0451 --- /dev/null +++ b/src/views/components/vuesax/popup/PopupFullscreen.vue @@ -0,0 +1,55 @@ + + + + + + diff --git a/src/views/components/vuesax/popup/PopupInnerPopup.vue b/src/views/components/vuesax/popup/PopupInnerPopup.vue new file mode 100644 index 0000000..6e3a5de --- /dev/null +++ b/src/views/components/vuesax/popup/PopupInnerPopup.vue @@ -0,0 +1,77 @@ + + + + + + diff --git a/src/views/components/vuesax/progress/Progress.vue b/src/views/components/vuesax/progress/Progress.vue new file mode 100644 index 0000000..a779470 --- /dev/null +++ b/src/views/components/vuesax/progress/Progress.vue @@ -0,0 +1,31 @@ + + + + + + diff --git a/src/views/components/vuesax/progress/ProgressColor.vue b/src/views/components/vuesax/progress/ProgressColor.vue new file mode 100644 index 0000000..9d6c1fc --- /dev/null +++ b/src/views/components/vuesax/progress/ProgressColor.vue @@ -0,0 +1,37 @@ + + + + diff --git a/src/views/components/vuesax/progress/ProgressHeight.vue b/src/views/components/vuesax/progress/ProgressHeight.vue new file mode 100644 index 0000000..911449b --- /dev/null +++ b/src/views/components/vuesax/progress/ProgressHeight.vue @@ -0,0 +1,35 @@ + + + + diff --git a/src/views/components/vuesax/progress/ProgressInterminate.vue b/src/views/components/vuesax/progress/ProgressInterminate.vue new file mode 100644 index 0000000..ca51f54 --- /dev/null +++ b/src/views/components/vuesax/progress/ProgressInterminate.vue @@ -0,0 +1,25 @@ + + + + diff --git a/src/views/components/vuesax/sidebar/Sidebar.vue b/src/views/components/vuesax/sidebar/Sidebar.vue new file mode 100644 index 0000000..e295fdc --- /dev/null +++ b/src/views/components/vuesax/sidebar/Sidebar.vue @@ -0,0 +1,47 @@ + + + + + + + + diff --git a/src/views/components/vuesax/sidebar/SidebarCustom.vue b/src/views/components/vuesax/sidebar/SidebarCustom.vue new file mode 100644 index 0000000..262a57b --- /dev/null +++ b/src/views/components/vuesax/sidebar/SidebarCustom.vue @@ -0,0 +1,91 @@ + + + + diff --git a/src/views/components/vuesax/sidebar/SidebarDefault.vue b/src/views/components/vuesax/sidebar/SidebarDefault.vue new file mode 100644 index 0000000..48b4c1f --- /dev/null +++ b/src/views/components/vuesax/sidebar/SidebarDefault.vue @@ -0,0 +1,158 @@ + + + + + + + + diff --git a/src/views/components/vuesax/sidebar/SidebarGroupCollapsed.vue b/src/views/components/vuesax/sidebar/SidebarGroupCollapsed.vue new file mode 100644 index 0000000..16a34be --- /dev/null +++ b/src/views/components/vuesax/sidebar/SidebarGroupCollapsed.vue @@ -0,0 +1,156 @@ + + + + + + diff --git a/src/views/components/vuesax/sidebar/SidebarParent.vue b/src/views/components/vuesax/sidebar/SidebarParent.vue new file mode 100644 index 0000000..40074d4 --- /dev/null +++ b/src/views/components/vuesax/sidebar/SidebarParent.vue @@ -0,0 +1,145 @@ + + + + + + diff --git a/src/views/components/vuesax/sidebar/SidebarReduceExpand.vue b/src/views/components/vuesax/sidebar/SidebarReduceExpand.vue new file mode 100644 index 0000000..ecb5807 --- /dev/null +++ b/src/views/components/vuesax/sidebar/SidebarReduceExpand.vue @@ -0,0 +1,151 @@ + + + + + + diff --git a/src/views/components/vuesax/sidebar/SidebarRight.vue b/src/views/components/vuesax/sidebar/SidebarRight.vue new file mode 100644 index 0000000..748e1fa --- /dev/null +++ b/src/views/components/vuesax/sidebar/SidebarRight.vue @@ -0,0 +1,135 @@ + + + + + + diff --git a/src/views/components/vuesax/sidebar/SidebarStatic.vue b/src/views/components/vuesax/sidebar/SidebarStatic.vue new file mode 100644 index 0000000..f8921d3 --- /dev/null +++ b/src/views/components/vuesax/sidebar/SidebarStatic.vue @@ -0,0 +1,138 @@ + + + + + + diff --git a/src/views/components/vuesax/slider/Slider.vue b/src/views/components/vuesax/slider/Slider.vue new file mode 100644 index 0000000..c5cc86d --- /dev/null +++ b/src/views/components/vuesax/slider/Slider.vue @@ -0,0 +1,43 @@ + + + + + + diff --git a/src/views/components/vuesax/slider/SliderChangeMethod.vue b/src/views/components/vuesax/slider/SliderChangeMethod.vue new file mode 100644 index 0000000..84cacdf --- /dev/null +++ b/src/views/components/vuesax/slider/SliderChangeMethod.vue @@ -0,0 +1,69 @@ + + + + + + diff --git a/src/views/components/vuesax/slider/SliderColor.vue b/src/views/components/vuesax/slider/SliderColor.vue new file mode 100644 index 0000000..9599e6a --- /dev/null +++ b/src/views/components/vuesax/slider/SliderColor.vue @@ -0,0 +1,51 @@ + + + + + + diff --git a/src/views/components/vuesax/slider/SliderDefault.vue b/src/views/components/vuesax/slider/SliderDefault.vue new file mode 100644 index 0000000..bf95c7c --- /dev/null +++ b/src/views/components/vuesax/slider/SliderDefault.vue @@ -0,0 +1,55 @@ + + + + + + diff --git a/src/views/components/vuesax/slider/SliderIcon.vue b/src/views/components/vuesax/slider/SliderIcon.vue new file mode 100644 index 0000000..8bd25fe --- /dev/null +++ b/src/views/components/vuesax/slider/SliderIcon.vue @@ -0,0 +1,60 @@ + + + + + + diff --git a/src/views/components/vuesax/slider/SliderRange.vue b/src/views/components/vuesax/slider/SliderRange.vue new file mode 100644 index 0000000..e8020be --- /dev/null +++ b/src/views/components/vuesax/slider/SliderRange.vue @@ -0,0 +1,50 @@ + + + + + + diff --git a/src/views/components/vuesax/slider/SliderTextFixed.vue b/src/views/components/vuesax/slider/SliderTextFixed.vue new file mode 100644 index 0000000..4cbfdd7 --- /dev/null +++ b/src/views/components/vuesax/slider/SliderTextFixed.vue @@ -0,0 +1,55 @@ + + + + + + diff --git a/src/views/components/vuesax/slider/SliderTicks.vue b/src/views/components/vuesax/slider/SliderTicks.vue new file mode 100644 index 0000000..fca89bf --- /dev/null +++ b/src/views/components/vuesax/slider/SliderTicks.vue @@ -0,0 +1,55 @@ + + + + + + diff --git a/src/views/components/vuesax/tabs/Tabs.vue b/src/views/components/vuesax/tabs/Tabs.vue new file mode 100644 index 0000000..ef55414 --- /dev/null +++ b/src/views/components/vuesax/tabs/Tabs.vue @@ -0,0 +1,37 @@ + + + + + + diff --git a/src/views/components/vuesax/tabs/TabsAlignments.vue b/src/views/components/vuesax/tabs/TabsAlignments.vue new file mode 100644 index 0000000..981cf78 --- /dev/null +++ b/src/views/components/vuesax/tabs/TabsAlignments.vue @@ -0,0 +1,167 @@ + + + + diff --git a/src/views/components/vuesax/tabs/TabsColor.vue b/src/views/components/vuesax/tabs/TabsColor.vue new file mode 100644 index 0000000..9423c33 --- /dev/null +++ b/src/views/components/vuesax/tabs/TabsColor.vue @@ -0,0 +1,107 @@ + + + + + + diff --git a/src/views/components/vuesax/tabs/TabsDefault.vue b/src/views/components/vuesax/tabs/TabsDefault.vue new file mode 100644 index 0000000..2432e7a --- /dev/null +++ b/src/views/components/vuesax/tabs/TabsDefault.vue @@ -0,0 +1,86 @@ + + + + diff --git a/src/views/components/vuesax/tabs/TabsIcons.vue b/src/views/components/vuesax/tabs/TabsIcons.vue new file mode 100644 index 0000000..1c07aeb --- /dev/null +++ b/src/views/components/vuesax/tabs/TabsIcons.vue @@ -0,0 +1,39 @@ + + + + diff --git a/src/views/components/vuesax/tabs/TabsPosition.vue b/src/views/components/vuesax/tabs/TabsPosition.vue new file mode 100644 index 0000000..373c839 --- /dev/null +++ b/src/views/components/vuesax/tabs/TabsPosition.vue @@ -0,0 +1,179 @@ + + + + diff --git a/src/views/components/vuesax/tooltip/Tooltip.vue b/src/views/components/vuesax/tooltip/Tooltip.vue new file mode 100644 index 0000000..58dc730 --- /dev/null +++ b/src/views/components/vuesax/tooltip/Tooltip.vue @@ -0,0 +1,37 @@ + + + + + + diff --git a/src/views/components/vuesax/tooltip/TooltipColor.vue b/src/views/components/vuesax/tooltip/TooltipColor.vue new file mode 100644 index 0000000..7397805 --- /dev/null +++ b/src/views/components/vuesax/tooltip/TooltipColor.vue @@ -0,0 +1,91 @@ + + + + diff --git a/src/views/components/vuesax/tooltip/TooltipDefault.vue b/src/views/components/vuesax/tooltip/TooltipDefault.vue new file mode 100644 index 0000000..d78fa38 --- /dev/null +++ b/src/views/components/vuesax/tooltip/TooltipDefault.vue @@ -0,0 +1,69 @@ + + + + + + diff --git a/src/views/components/vuesax/tooltip/TooltipDelay.vue b/src/views/components/vuesax/tooltip/TooltipDelay.vue new file mode 100644 index 0000000..5b8dc4a --- /dev/null +++ b/src/views/components/vuesax/tooltip/TooltipDelay.vue @@ -0,0 +1,45 @@ + + + + diff --git a/src/views/components/vuesax/tooltip/TooltipPosition.vue b/src/views/components/vuesax/tooltip/TooltipPosition.vue new file mode 100644 index 0000000..50a1334 --- /dev/null +++ b/src/views/components/vuesax/tooltip/TooltipPosition.vue @@ -0,0 +1,52 @@ + + + + diff --git a/src/views/components/vuesax/tooltip/TooltipTitle.vue b/src/views/components/vuesax/tooltip/TooltipTitle.vue new file mode 100644 index 0000000..91e8eea --- /dev/null +++ b/src/views/components/vuesax/tooltip/TooltipTitle.vue @@ -0,0 +1,39 @@ + + + + diff --git a/src/views/components/vuesax/upload/Upload.vue b/src/views/components/vuesax/upload/Upload.vue new file mode 100644 index 0000000..b0b27da --- /dev/null +++ b/src/views/components/vuesax/upload/Upload.vue @@ -0,0 +1,31 @@ + + + + + + diff --git a/src/views/components/vuesax/upload/UploadAutomatic.vue b/src/views/components/vuesax/upload/UploadAutomatic.vue new file mode 100644 index 0000000..82e56e6 --- /dev/null +++ b/src/views/components/vuesax/upload/UploadAutomatic.vue @@ -0,0 +1,47 @@ + + + + + + diff --git a/src/views/components/vuesax/upload/UploadDefault.vue b/src/views/components/vuesax/upload/UploadDefault.vue new file mode 100644 index 0000000..d227acf --- /dev/null +++ b/src/views/components/vuesax/upload/UploadDefault.vue @@ -0,0 +1,51 @@ + + + + + + diff --git a/src/views/components/vuesax/upload/UploadMultiple.vue b/src/views/components/vuesax/upload/UploadMultiple.vue new file mode 100644 index 0000000..d0621eb --- /dev/null +++ b/src/views/components/vuesax/upload/UploadMultiple.vue @@ -0,0 +1,47 @@ + + + + + + diff --git a/src/views/config/Config.vue b/src/views/config/Config.vue new file mode 100644 index 0000000..20e932b --- /dev/null +++ b/src/views/config/Config.vue @@ -0,0 +1,373 @@ + + + + + diff --git a/src/views/config/jobCols.js b/src/views/config/jobCols.js new file mode 100644 index 0000000..4c0682b --- /dev/null +++ b/src/views/config/jobCols.js @@ -0,0 +1,12 @@ +import ColCreator from "@/table/index"; + +class Table { + cols = [ + new ColCreator('id', 'عملیات').renderSlot('operator').export(), + new ColCreator('cities_str', 'شهر های فعال در شغل').renderSlot('cities_str_slot').export(), + new ColCreator('title', 'عنوان').export(), + + ]; +} + +export default new Table().cols; diff --git a/src/views/costs/ChartCosts.vue b/src/views/costs/ChartCosts.vue new file mode 100644 index 0000000..55639ab --- /dev/null +++ b/src/views/costs/ChartCosts.vue @@ -0,0 +1,104 @@ + + + + + diff --git a/src/views/customer/CustomerEdit.vue b/src/views/customer/CustomerEdit.vue new file mode 100644 index 0000000..d831760 --- /dev/null +++ b/src/views/customer/CustomerEdit.vue @@ -0,0 +1,72 @@ + + + diff --git a/src/views/customer/CustomerEditTabAccount.vue b/src/views/customer/CustomerEditTabAccount.vue new file mode 100644 index 0000000..a6dfb29 --- /dev/null +++ b/src/views/customer/CustomerEditTabAccount.vue @@ -0,0 +1,198 @@ + + + + + diff --git a/src/views/customer/CustomerEditTabInformation.vue b/src/views/customer/CustomerEditTabInformation.vue new file mode 100644 index 0000000..24f339f --- /dev/null +++ b/src/views/customer/CustomerEditTabInformation.vue @@ -0,0 +1,160 @@ + + + + + diff --git a/src/views/customer/CustomerEditTabSocial.vue b/src/views/customer/CustomerEditTabSocial.vue new file mode 100644 index 0000000..c876e8b --- /dev/null +++ b/src/views/customer/CustomerEditTabSocial.vue @@ -0,0 +1,134 @@ + + + + + diff --git a/src/views/customer/List.vue b/src/views/customer/List.vue new file mode 100644 index 0000000..436d171 --- /dev/null +++ b/src/views/customer/List.vue @@ -0,0 +1,226 @@ + + + diff --git a/src/views/customer/cell-renderer/CellRendererActions.vue b/src/views/customer/cell-renderer/CellRendererActions.vue new file mode 100644 index 0000000..acf5b60 --- /dev/null +++ b/src/views/customer/cell-renderer/CellRendererActions.vue @@ -0,0 +1,50 @@ + + + diff --git a/src/views/customer/cell-renderer/CellRendererLink.vue b/src/views/customer/cell-renderer/CellRendererLink.vue new file mode 100644 index 0000000..687f834 --- /dev/null +++ b/src/views/customer/cell-renderer/CellRendererLink.vue @@ -0,0 +1,21 @@ + + + diff --git a/src/views/customer/cell-renderer/CellRendererStatus.vue b/src/views/customer/cell-renderer/CellRendererStatus.vue new file mode 100644 index 0000000..5fc1df2 --- /dev/null +++ b/src/views/customer/cell-renderer/CellRendererStatus.vue @@ -0,0 +1,41 @@ + + + + + diff --git a/src/views/customer/cell-renderer/CellRendererVerified.vue b/src/views/customer/cell-renderer/CellRendererVerified.vue new file mode 100644 index 0000000..db4fa9c --- /dev/null +++ b/src/views/customer/cell-renderer/CellRendererVerified.vue @@ -0,0 +1,14 @@ + + + diff --git a/src/views/file/ListFile.vue b/src/views/file/ListFile.vue new file mode 100644 index 0000000..74d6ab6 --- /dev/null +++ b/src/views/file/ListFile.vue @@ -0,0 +1,181 @@ + + + + + diff --git a/src/views/file/tablefile.js b/src/views/file/tablefile.js new file mode 100644 index 0000000..6f71d8b --- /dev/null +++ b/src/views/file/tablefile.js @@ -0,0 +1,12 @@ +import XTbl,{Xtc} from '../../components/x-table/index'; +const tbl = new XTbl('/admin/file/table', 'لیست فایل ها'); + +tbl.add(new Xtc('src', 'رسانه').renderSlot('media')) +tbl.add(new Xtc('type_str', 'نوع رسانه').filterText()) +tbl.add(new Xtc('sts_str', 'وضعیت').filterText()) +tbl.add(new Xtc('title', 'عنوان عکس').filterText()) +tbl.add(new Xtc('collection.mobile', 'ارسال کننده').hidden().filterText()) +tbl.add(new Xtc('opt', 'عملیات').noSort().renderSlot('opt')) + +export default tbl; + diff --git a/src/views/forms/FormLayouts.vue b/src/views/forms/FormLayouts.vue new file mode 100644 index 0000000..0d92269 --- /dev/null +++ b/src/views/forms/FormLayouts.vue @@ -0,0 +1,620 @@ + + + diff --git a/src/views/forms/form-elements/checkbox/Checkbox.vue b/src/views/forms/form-elements/checkbox/Checkbox.vue new file mode 100644 index 0000000..b6b98a1 --- /dev/null +++ b/src/views/forms/form-elements/checkbox/Checkbox.vue @@ -0,0 +1,43 @@ + + + + + + diff --git a/src/views/forms/form-elements/checkbox/CheckboxArrayObjectValue.vue b/src/views/forms/form-elements/checkbox/CheckboxArrayObjectValue.vue new file mode 100644 index 0000000..659e561 --- /dev/null +++ b/src/views/forms/form-elements/checkbox/CheckboxArrayObjectValue.vue @@ -0,0 +1,66 @@ + + + + + + diff --git a/src/views/forms/form-elements/checkbox/CheckboxArrayValue.vue b/src/views/forms/form-elements/checkbox/CheckboxArrayValue.vue new file mode 100644 index 0000000..b2288ab --- /dev/null +++ b/src/views/forms/form-elements/checkbox/CheckboxArrayValue.vue @@ -0,0 +1,77 @@ + + + + + + diff --git a/src/views/forms/form-elements/checkbox/CheckboxBooleanValue.vue b/src/views/forms/form-elements/checkbox/CheckboxBooleanValue.vue new file mode 100644 index 0000000..ac85d5c --- /dev/null +++ b/src/views/forms/form-elements/checkbox/CheckboxBooleanValue.vue @@ -0,0 +1,60 @@ + + + + + + diff --git a/src/views/forms/form-elements/checkbox/CheckboxChangeIcon.vue b/src/views/forms/form-elements/checkbox/CheckboxChangeIcon.vue new file mode 100644 index 0000000..9a6ca3e --- /dev/null +++ b/src/views/forms/form-elements/checkbox/CheckboxChangeIcon.vue @@ -0,0 +1,100 @@ + + + + + + diff --git a/src/views/forms/form-elements/checkbox/CheckboxColor.vue b/src/views/forms/form-elements/checkbox/CheckboxColor.vue new file mode 100644 index 0000000..881648d --- /dev/null +++ b/src/views/forms/form-elements/checkbox/CheckboxColor.vue @@ -0,0 +1,104 @@ + + + + + + diff --git a/src/views/forms/form-elements/checkbox/CheckboxState.vue b/src/views/forms/form-elements/checkbox/CheckboxState.vue new file mode 100644 index 0000000..0bb0043 --- /dev/null +++ b/src/views/forms/form-elements/checkbox/CheckboxState.vue @@ -0,0 +1,76 @@ + + + + + + diff --git a/src/views/forms/form-elements/checkbox/CheckboxStringValue.vue b/src/views/forms/form-elements/checkbox/CheckboxStringValue.vue new file mode 100644 index 0000000..67a7920 --- /dev/null +++ b/src/views/forms/form-elements/checkbox/CheckboxStringValue.vue @@ -0,0 +1,58 @@ + + + + + + diff --git a/src/views/forms/form-elements/input/Input.vue b/src/views/forms/form-elements/input/Input.vue new file mode 100644 index 0000000..86aae99 --- /dev/null +++ b/src/views/forms/form-elements/input/Input.vue @@ -0,0 +1,43 @@ + + + + + + diff --git a/src/views/forms/form-elements/input/InputColor.vue b/src/views/forms/form-elements/input/InputColor.vue new file mode 100644 index 0000000..1a2057f --- /dev/null +++ b/src/views/forms/form-elements/input/InputColor.vue @@ -0,0 +1,78 @@ + + + + + + diff --git a/src/views/forms/form-elements/input/InputDefault.vue b/src/views/forms/form-elements/input/InputDefault.vue new file mode 100644 index 0000000..f461265 --- /dev/null +++ b/src/views/forms/form-elements/input/InputDefault.vue @@ -0,0 +1,52 @@ + + + + + + diff --git a/src/views/forms/form-elements/input/InputIcon.vue b/src/views/forms/form-elements/input/InputIcon.vue new file mode 100644 index 0000000..20d10cb --- /dev/null +++ b/src/views/forms/form-elements/input/InputIcon.vue @@ -0,0 +1,80 @@ + + + + + + diff --git a/src/views/forms/form-elements/input/InputLabel.vue b/src/views/forms/form-elements/input/InputLabel.vue new file mode 100644 index 0000000..9306172 --- /dev/null +++ b/src/views/forms/form-elements/input/InputLabel.vue @@ -0,0 +1,52 @@ + + + + + + diff --git a/src/views/forms/form-elements/input/InputLabelPlaceholder.vue b/src/views/forms/form-elements/input/InputLabelPlaceholder.vue new file mode 100644 index 0000000..4d90a51 --- /dev/null +++ b/src/views/forms/form-elements/input/InputLabelPlaceholder.vue @@ -0,0 +1,52 @@ + + + + + + diff --git a/src/views/forms/form-elements/input/InputSize.vue b/src/views/forms/form-elements/input/InputSize.vue new file mode 100644 index 0000000..9291284 --- /dev/null +++ b/src/views/forms/form-elements/input/InputSize.vue @@ -0,0 +1,58 @@ + + + + + + diff --git a/src/views/forms/form-elements/input/InputValidation.vue b/src/views/forms/form-elements/input/InputValidation.vue new file mode 100644 index 0000000..8c696bc --- /dev/null +++ b/src/views/forms/form-elements/input/InputValidation.vue @@ -0,0 +1,112 @@ + + + + + diff --git a/src/views/forms/form-elements/number-input/NumberInput.vue b/src/views/forms/form-elements/number-input/NumberInput.vue new file mode 100644 index 0000000..a61dded --- /dev/null +++ b/src/views/forms/form-elements/number-input/NumberInput.vue @@ -0,0 +1,43 @@ + + + + + + diff --git a/src/views/forms/form-elements/number-input/NumberInputColor.vue b/src/views/forms/form-elements/number-input/NumberInputColor.vue new file mode 100644 index 0000000..0c7945a --- /dev/null +++ b/src/views/forms/form-elements/number-input/NumberInputColor.vue @@ -0,0 +1,71 @@ + + + + + diff --git a/src/views/forms/form-elements/number-input/NumberInputDecimal.vue b/src/views/forms/form-elements/number-input/NumberInputDecimal.vue new file mode 100644 index 0000000..60d3fe2 --- /dev/null +++ b/src/views/forms/form-elements/number-input/NumberInputDecimal.vue @@ -0,0 +1,48 @@ + + + + + + diff --git a/src/views/forms/form-elements/number-input/NumberInputDefault.vue b/src/views/forms/form-elements/number-input/NumberInputDefault.vue new file mode 100644 index 0000000..37b8204 --- /dev/null +++ b/src/views/forms/form-elements/number-input/NumberInputDefault.vue @@ -0,0 +1,57 @@ + + + + + + diff --git a/src/views/forms/form-elements/number-input/NumberInputLabel.vue b/src/views/forms/form-elements/number-input/NumberInputLabel.vue new file mode 100644 index 0000000..2713c43 --- /dev/null +++ b/src/views/forms/form-elements/number-input/NumberInputLabel.vue @@ -0,0 +1,48 @@ + + + + + + diff --git a/src/views/forms/form-elements/number-input/NumberInputMinMax.vue b/src/views/forms/form-elements/number-input/NumberInputMinMax.vue new file mode 100644 index 0000000..dd0af2d --- /dev/null +++ b/src/views/forms/form-elements/number-input/NumberInputMinMax.vue @@ -0,0 +1,48 @@ + + + + + + diff --git a/src/views/forms/form-elements/number-input/NumberInputSize.vue b/src/views/forms/form-elements/number-input/NumberInputSize.vue new file mode 100644 index 0000000..da82f9f --- /dev/null +++ b/src/views/forms/form-elements/number-input/NumberInputSize.vue @@ -0,0 +1,60 @@ + + + + + + diff --git a/src/views/forms/form-elements/number-input/NumberInputStep.vue b/src/views/forms/form-elements/number-input/NumberInputStep.vue new file mode 100644 index 0000000..27f8a95 --- /dev/null +++ b/src/views/forms/form-elements/number-input/NumberInputStep.vue @@ -0,0 +1,48 @@ + + + + + + diff --git a/src/views/forms/form-elements/radio/Radio.vue b/src/views/forms/form-elements/radio/Radio.vue new file mode 100644 index 0000000..3fdd964 --- /dev/null +++ b/src/views/forms/form-elements/radio/Radio.vue @@ -0,0 +1,28 @@ + + + + + + diff --git a/src/views/forms/form-elements/radio/RadioColor.vue b/src/views/forms/form-elements/radio/RadioColor.vue new file mode 100644 index 0000000..a20eab2 --- /dev/null +++ b/src/views/forms/form-elements/radio/RadioColor.vue @@ -0,0 +1,100 @@ + + + + + + diff --git a/src/views/forms/form-elements/radio/RadioDefault.vue b/src/views/forms/form-elements/radio/RadioDefault.vue new file mode 100644 index 0000000..1f04601 --- /dev/null +++ b/src/views/forms/form-elements/radio/RadioDefault.vue @@ -0,0 +1,80 @@ + + + + + + diff --git a/src/views/forms/form-elements/select/Select.vue b/src/views/forms/form-elements/select/Select.vue new file mode 100644 index 0000000..9221068 --- /dev/null +++ b/src/views/forms/form-elements/select/Select.vue @@ -0,0 +1,45 @@ + + + + + diff --git a/src/views/forms/form-elements/select/SelectAutocomplete.vue b/src/views/forms/form-elements/select/SelectAutocomplete.vue new file mode 100644 index 0000000..97fe374 --- /dev/null +++ b/src/views/forms/form-elements/select/SelectAutocomplete.vue @@ -0,0 +1,122 @@ + + + + + + diff --git a/src/views/forms/form-elements/select/SelectColor.vue b/src/views/forms/form-elements/select/SelectColor.vue new file mode 100644 index 0000000..564b088 --- /dev/null +++ b/src/views/forms/form-elements/select/SelectColor.vue @@ -0,0 +1,114 @@ + + + + + + diff --git a/src/views/forms/form-elements/select/SelectGroupItems.vue b/src/views/forms/form-elements/select/SelectGroupItems.vue new file mode 100644 index 0000000..fc79f8c --- /dev/null +++ b/src/views/forms/form-elements/select/SelectGroupItems.vue @@ -0,0 +1,221 @@ + + + + + + diff --git a/src/views/forms/form-elements/select/SelectIsSelectedItem.vue b/src/views/forms/form-elements/select/SelectIsSelectedItem.vue new file mode 100644 index 0000000..da11ae4 --- /dev/null +++ b/src/views/forms/form-elements/select/SelectIsSelectedItem.vue @@ -0,0 +1,92 @@ + + + + + + diff --git a/src/views/forms/form-elements/select/SelectLabels.vue b/src/views/forms/form-elements/select/SelectLabels.vue new file mode 100644 index 0000000..dd90c32 --- /dev/null +++ b/src/views/forms/form-elements/select/SelectLabels.vue @@ -0,0 +1,121 @@ + + + + + + diff --git a/src/views/forms/form-elements/select/SelectMultiple.vue b/src/views/forms/form-elements/select/SelectMultiple.vue new file mode 100644 index 0000000..456f813 --- /dev/null +++ b/src/views/forms/form-elements/select/SelectMultiple.vue @@ -0,0 +1,125 @@ + + + + + + diff --git a/src/views/forms/form-elements/select/SelectSingleSelection.vue b/src/views/forms/form-elements/select/SelectSingleSelection.vue new file mode 100644 index 0000000..8a64f65 --- /dev/null +++ b/src/views/forms/form-elements/select/SelectSingleSelection.vue @@ -0,0 +1,125 @@ + + + + + + diff --git a/src/views/forms/form-elements/select/SelectValidators.vue b/src/views/forms/form-elements/select/SelectValidators.vue new file mode 100644 index 0000000..f98484c --- /dev/null +++ b/src/views/forms/form-elements/select/SelectValidators.vue @@ -0,0 +1,174 @@ + + + + + diff --git a/src/views/forms/form-elements/switch/Switch.vue b/src/views/forms/form-elements/switch/Switch.vue new file mode 100644 index 0000000..da91c2b --- /dev/null +++ b/src/views/forms/form-elements/switch/Switch.vue @@ -0,0 +1,41 @@ + + + + + + + + diff --git a/src/views/forms/form-elements/switch/SwitchArrayValue.vue b/src/views/forms/form-elements/switch/SwitchArrayValue.vue new file mode 100644 index 0000000..364e83d --- /dev/null +++ b/src/views/forms/form-elements/switch/SwitchArrayValue.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/views/forms/form-elements/switch/SwitchColor.vue b/src/views/forms/form-elements/switch/SwitchColor.vue new file mode 100644 index 0000000..a1cbb8d --- /dev/null +++ b/src/views/forms/form-elements/switch/SwitchColor.vue @@ -0,0 +1,113 @@ + + + + + diff --git a/src/views/forms/form-elements/switch/SwitchIcons.vue b/src/views/forms/form-elements/switch/SwitchIcons.vue new file mode 100644 index 0000000..80c142e --- /dev/null +++ b/src/views/forms/form-elements/switch/SwitchIcons.vue @@ -0,0 +1,108 @@ + + + + + diff --git a/src/views/forms/form-elements/switch/SwitchState.vue b/src/views/forms/form-elements/switch/SwitchState.vue new file mode 100644 index 0000000..4db3112 --- /dev/null +++ b/src/views/forms/form-elements/switch/SwitchState.vue @@ -0,0 +1,83 @@ + + + + + diff --git a/src/views/forms/form-elements/switch/SwitchText.vue b/src/views/forms/form-elements/switch/SwitchText.vue new file mode 100644 index 0000000..c650165 --- /dev/null +++ b/src/views/forms/form-elements/switch/SwitchText.vue @@ -0,0 +1,106 @@ + + + + + diff --git a/src/views/forms/form-elements/textarea/Textarea.vue b/src/views/forms/form-elements/textarea/Textarea.vue new file mode 100644 index 0000000..c34d9cb --- /dev/null +++ b/src/views/forms/form-elements/textarea/Textarea.vue @@ -0,0 +1,38 @@ + + + + + + diff --git a/src/views/forms/form-elements/textarea/TextareaCounter.vue b/src/views/forms/form-elements/textarea/TextareaCounter.vue new file mode 100644 index 0000000..65d30c4 --- /dev/null +++ b/src/views/forms/form-elements/textarea/TextareaCounter.vue @@ -0,0 +1,50 @@ + + + + + + diff --git a/src/views/forms/form-elements/textarea/TextareaDefault.vue b/src/views/forms/form-elements/textarea/TextareaDefault.vue new file mode 100644 index 0000000..b0e0b6f --- /dev/null +++ b/src/views/forms/form-elements/textarea/TextareaDefault.vue @@ -0,0 +1,44 @@ + + + + + + diff --git a/src/views/forms/form-elements/textarea/TextareaHeight.vue b/src/views/forms/form-elements/textarea/TextareaHeight.vue new file mode 100644 index 0000000..45f50a9 --- /dev/null +++ b/src/views/forms/form-elements/textarea/TextareaHeight.vue @@ -0,0 +1,44 @@ + + + + + + diff --git a/src/views/forms/form-elements/textarea/TextareaLabel.vue b/src/views/forms/form-elements/textarea/TextareaLabel.vue new file mode 100644 index 0000000..e4894b0 --- /dev/null +++ b/src/views/forms/form-elements/textarea/TextareaLabel.vue @@ -0,0 +1,42 @@ + + + + + diff --git a/src/views/forms/form-elements/textarea/TextareaWidth.vue b/src/views/forms/form-elements/textarea/TextareaWidth.vue new file mode 100644 index 0000000..e6784e6 --- /dev/null +++ b/src/views/forms/form-elements/textarea/TextareaWidth.vue @@ -0,0 +1,44 @@ + + + + + + diff --git a/src/views/forms/form-input-group/FormInputGroup.vue b/src/views/forms/form-input-group/FormInputGroup.vue new file mode 100644 index 0000000..d4768e0 --- /dev/null +++ b/src/views/forms/form-input-group/FormInputGroup.vue @@ -0,0 +1,27 @@ + + + diff --git a/src/views/forms/form-input-group/FormInputGroupBasic.vue b/src/views/forms/form-input-group/FormInputGroupBasic.vue new file mode 100644 index 0000000..f21d9ce --- /dev/null +++ b/src/views/forms/form-input-group/FormInputGroupBasic.vue @@ -0,0 +1,173 @@ + + + diff --git a/src/views/forms/form-input-group/FormInputGroupButtonAddons.vue b/src/views/forms/form-input-group/FormInputGroupButtonAddons.vue new file mode 100644 index 0000000..05c9c1c --- /dev/null +++ b/src/views/forms/form-input-group/FormInputGroupButtonAddons.vue @@ -0,0 +1,141 @@ + + + diff --git a/src/views/forms/form-input-group/FormInputGroupFormElements.vue b/src/views/forms/form-input-group/FormInputGroupFormElements.vue new file mode 100644 index 0000000..1ce9edf --- /dev/null +++ b/src/views/forms/form-input-group/FormInputGroupFormElements.vue @@ -0,0 +1,157 @@ + + + + + diff --git a/src/views/forms/form-input-group/FormInputGroupMultipleAddons.vue b/src/views/forms/form-input-group/FormInputGroupMultipleAddons.vue new file mode 100644 index 0000000..0591855 --- /dev/null +++ b/src/views/forms/form-input-group/FormInputGroupMultipleAddons.vue @@ -0,0 +1,97 @@ + + + diff --git a/src/views/forms/form-input-group/FormInputGroupSizing.vue b/src/views/forms/form-input-group/FormInputGroupSizing.vue new file mode 100644 index 0000000..509984f --- /dev/null +++ b/src/views/forms/form-input-group/FormInputGroupSizing.vue @@ -0,0 +1,109 @@ + + + diff --git a/src/views/forms/form-validation/FormValidation.vue b/src/views/forms/form-validation/FormValidation.vue new file mode 100644 index 0000000..b88c71e --- /dev/null +++ b/src/views/forms/form-validation/FormValidation.vue @@ -0,0 +1,45 @@ + + + + + diff --git a/src/views/forms/form-validation/FormValidationCustomErrorMessages.vue b/src/views/forms/form-validation/FormValidationCustomErrorMessages.vue new file mode 100644 index 0000000..ae2c500 --- /dev/null +++ b/src/views/forms/form-validation/FormValidationCustomErrorMessages.vue @@ -0,0 +1,122 @@ + + + + + + diff --git a/src/views/forms/form-validation/FormValidationEvents.vue b/src/views/forms/form-validation/FormValidationEvents.vue new file mode 100644 index 0000000..f27238f --- /dev/null +++ b/src/views/forms/form-validation/FormValidationEvents.vue @@ -0,0 +1,87 @@ + + + + + + diff --git a/src/views/forms/form-validation/FormValidationMultipleRules.vue b/src/views/forms/form-validation/FormValidationMultipleRules.vue new file mode 100644 index 0000000..a82b757 --- /dev/null +++ b/src/views/forms/form-validation/FormValidationMultipleRules.vue @@ -0,0 +1,136 @@ + + + + + + diff --git a/src/views/forms/form-validation/FormValidationSimple.vue b/src/views/forms/form-validation/FormValidationSimple.vue new file mode 100644 index 0000000..a6cd0f3 --- /dev/null +++ b/src/views/forms/form-validation/FormValidationSimple.vue @@ -0,0 +1,88 @@ + + + + + + diff --git a/src/views/forms/form-validation/FormValidationTypes.vue b/src/views/forms/form-validation/FormValidationTypes.vue new file mode 100644 index 0000000..fa58057 --- /dev/null +++ b/src/views/forms/form-validation/FormValidationTypes.vue @@ -0,0 +1,367 @@ + + + + + + diff --git a/src/views/forms/form-wizard/FormWizard.vue b/src/views/forms/form-wizard/FormWizard.vue new file mode 100644 index 0000000..dcc0e25 --- /dev/null +++ b/src/views/forms/form-wizard/FormWizard.vue @@ -0,0 +1,33 @@ + + + + + diff --git a/src/views/forms/form-wizard/FormWizardIconTab.vue b/src/views/forms/form-wizard/FormWizardIconTab.vue new file mode 100644 index 0000000..ea4db6b --- /dev/null +++ b/src/views/forms/form-wizard/FormWizardIconTab.vue @@ -0,0 +1,221 @@ + + + + + + diff --git a/src/views/forms/form-wizard/FormWizardNumberTab.vue b/src/views/forms/form-wizard/FormWizardNumberTab.vue new file mode 100644 index 0000000..fbe4964 --- /dev/null +++ b/src/views/forms/form-wizard/FormWizardNumberTab.vue @@ -0,0 +1,246 @@ + + + + + + diff --git a/src/views/forms/form-wizard/FormWizardValidation.vue b/src/views/forms/form-wizard/FormWizardValidation.vue new file mode 100644 index 0000000..0e6e186 --- /dev/null +++ b/src/views/forms/form-wizard/FormWizardValidation.vue @@ -0,0 +1,402 @@ + + + + + + diff --git a/src/views/manage/Const.vue b/src/views/manage/Const.vue new file mode 100644 index 0000000..c3a6bfa --- /dev/null +++ b/src/views/manage/Const.vue @@ -0,0 +1,177 @@ + + + + + diff --git a/src/views/marketer/LIstMarketer.vue b/src/views/marketer/LIstMarketer.vue new file mode 100644 index 0000000..02a8f34 --- /dev/null +++ b/src/views/marketer/LIstMarketer.vue @@ -0,0 +1,227 @@ + + + + diff --git a/src/views/marketer/tableMarketer.js b/src/views/marketer/tableMarketer.js new file mode 100644 index 0000000..400d478 --- /dev/null +++ b/src/views/marketer/tableMarketer.js @@ -0,0 +1,13 @@ +import XTbl,{Xtc} from '../../components/x-table/index'; +const tbl = new XTbl('/admin/access/table', 'لسیت دسترسی بازاریابان'); + +tbl.add(new Xtc('customer.mobile', 'مشتری').filterText()) +tbl.add(new Xtc('mobile', 'بازاریاب').filterText()) +tbl.add(new Xtc('access_str', 'دسترسی ها').filterSelect()) +tbl.add(new Xtc('exaj', 'تاریخ اعتبار').filterDate()) +tbl.add(new Xtc('update_by', 'تغییریافته توسط').filterSelect()) +tbl.add(new Xtc('uaj', 'تاریخ آخرین تغییر').filterDate()) +tbl.add(new Xtc('opt', 'عملیات').noSort().renderSlot('opt')) + +export default tbl; + diff --git a/src/views/myactivity/ListActivity.vue b/src/views/myactivity/ListActivity.vue new file mode 100644 index 0000000..d7a4826 --- /dev/null +++ b/src/views/myactivity/ListActivity.vue @@ -0,0 +1,41 @@ + + + + diff --git a/src/views/myactivity/tableActivity.js b/src/views/myactivity/tableActivity.js new file mode 100644 index 0000000..e6e54cb --- /dev/null +++ b/src/views/myactivity/tableActivity.js @@ -0,0 +1,10 @@ +import XTbl,{Xtc} from '../../components/x-table/index'; +const tbl = new XTbl('/admin/profile', 'لسیت فعالیت های من'); + +tbl.add(new Xtc('type_str', 'فعالیت').filterText()) +tbl.add(new Xtc('reject_reason', ' دلیل رد').filterText()) +tbl.add(new Xtc('code', 'کد').filterText()) +tbl.add(new Xtc('caj', 'تاریخ').filterDate()) + +export default tbl; + diff --git a/src/views/order/Add.vue b/src/views/order/Add.vue new file mode 100644 index 0000000..49af13b --- /dev/null +++ b/src/views/order/Add.vue @@ -0,0 +1,146 @@ + + + + + + + + diff --git a/src/views/order/List.vue b/src/views/order/List.vue new file mode 100644 index 0000000..62e1385 --- /dev/null +++ b/src/views/order/List.vue @@ -0,0 +1,294 @@ + + + + + diff --git a/src/views/pages/ComingSoon.vue b/src/views/pages/ComingSoon.vue new file mode 100644 index 0000000..a5dcbeb --- /dev/null +++ b/src/views/pages/ComingSoon.vue @@ -0,0 +1,81 @@ + + + + + + + + diff --git a/src/views/pages/Error404.vue b/src/views/pages/Error404.vue new file mode 100644 index 0000000..0b8614a --- /dev/null +++ b/src/views/pages/Error404.vue @@ -0,0 +1,20 @@ + + + + diff --git a/src/views/pages/Error500.vue b/src/views/pages/Error500.vue new file mode 100644 index 0000000..04202ed --- /dev/null +++ b/src/views/pages/Error500.vue @@ -0,0 +1,20 @@ + + + + diff --git a/src/views/pages/Faq.vue b/src/views/pages/Faq.vue new file mode 100644 index 0000000..ec6b1be --- /dev/null +++ b/src/views/pages/Faq.vue @@ -0,0 +1,239 @@ +] + + + + + + + diff --git a/src/views/pages/ForgotPassword.vue b/src/views/pages/ForgotPassword.vue new file mode 100644 index 0000000..6d58894 --- /dev/null +++ b/src/views/pages/ForgotPassword.vue @@ -0,0 +1,47 @@ + + + + + + diff --git a/src/views/pages/Invoice.vue b/src/views/pages/Invoice.vue new file mode 100644 index 0000000..885674a --- /dev/null +++ b/src/views/pages/Invoice.vue @@ -0,0 +1,237 @@ + + + + + + + + diff --git a/src/views/pages/KnowledgeBase.vue b/src/views/pages/KnowledgeBase.vue new file mode 100644 index 0000000..a495eaf --- /dev/null +++ b/src/views/pages/KnowledgeBase.vue @@ -0,0 +1,102 @@ + + + + + + + + diff --git a/src/views/pages/KnowledgeBaseCategory.vue b/src/views/pages/KnowledgeBaseCategory.vue new file mode 100644 index 0000000..4798c94 --- /dev/null +++ b/src/views/pages/KnowledgeBaseCategory.vue @@ -0,0 +1,238 @@ + + + + + + diff --git a/src/views/pages/KnowledgeBaseCategoryQuestion.vue b/src/views/pages/KnowledgeBaseCategoryQuestion.vue new file mode 100644 index 0000000..a9c5399 --- /dev/null +++ b/src/views/pages/KnowledgeBaseCategoryQuestion.vue @@ -0,0 +1,105 @@ + + + + + diff --git a/src/views/pages/LockScreen.vue b/src/views/pages/LockScreen.vue new file mode 100644 index 0000000..ab31455 --- /dev/null +++ b/src/views/pages/LockScreen.vue @@ -0,0 +1,51 @@ + + + + + + diff --git a/src/views/pages/Maintenance.vue b/src/views/pages/Maintenance.vue new file mode 100644 index 0000000..59abe77 --- /dev/null +++ b/src/views/pages/Maintenance.vue @@ -0,0 +1,30 @@ + + + + + + diff --git a/src/views/pages/NotAuthorized.vue b/src/views/pages/NotAuthorized.vue new file mode 100644 index 0000000..8ce442b --- /dev/null +++ b/src/views/pages/NotAuthorized.vue @@ -0,0 +1,20 @@ + + + + diff --git a/src/views/pages/Profile.vue b/src/views/pages/Profile.vue new file mode 100644 index 0000000..0e05746 --- /dev/null +++ b/src/views/pages/Profile.vue @@ -0,0 +1,577 @@ + + + + + + + + + diff --git a/src/views/pages/ResetPassword.vue b/src/views/pages/ResetPassword.vue new file mode 100644 index 0000000..7bde541 --- /dev/null +++ b/src/views/pages/ResetPassword.vue @@ -0,0 +1,54 @@ + + + + + + diff --git a/src/views/pages/Search.vue b/src/views/pages/Search.vue new file mode 100644 index 0000000..274ec1f --- /dev/null +++ b/src/views/pages/Search.vue @@ -0,0 +1,332 @@ + + + + + + + + diff --git a/src/views/pages/login/Login.vue b/src/views/pages/login/Login.vue new file mode 100644 index 0000000..d59fbcd --- /dev/null +++ b/src/views/pages/login/Login.vue @@ -0,0 +1,74 @@ + + + + + + + + diff --git a/src/views/pages/login/LoginAuth0.vue b/src/views/pages/login/LoginAuth0.vue new file mode 100644 index 0000000..439c44a --- /dev/null +++ b/src/views/pages/login/LoginAuth0.vue @@ -0,0 +1,39 @@ + + + diff --git a/src/views/pages/login/LoginFirebase.vue b/src/views/pages/login/LoginFirebase.vue new file mode 100644 index 0000000..1051741 --- /dev/null +++ b/src/views/pages/login/LoginFirebase.vue @@ -0,0 +1,150 @@ + + + + + + diff --git a/src/views/pages/login/LoginJWT.vue b/src/views/pages/login/LoginJWT.vue new file mode 100644 index 0000000..6ba1ffa --- /dev/null +++ b/src/views/pages/login/LoginJWT.vue @@ -0,0 +1,109 @@ + + + + diff --git a/src/views/pages/register/Register.vue b/src/views/pages/register/Register.vue new file mode 100644 index 0000000..64b0b9b --- /dev/null +++ b/src/views/pages/register/Register.vue @@ -0,0 +1,70 @@ + + + + + + + + diff --git a/src/views/pages/register/RegisterAuth0.vue b/src/views/pages/register/RegisterAuth0.vue new file mode 100644 index 0000000..01330e5 --- /dev/null +++ b/src/views/pages/register/RegisterAuth0.vue @@ -0,0 +1,45 @@ + + + + + + + diff --git a/src/views/pages/register/RegisterFirebase.vue b/src/views/pages/register/RegisterFirebase.vue new file mode 100644 index 0000000..488159e --- /dev/null +++ b/src/views/pages/register/RegisterFirebase.vue @@ -0,0 +1,107 @@ + + + diff --git a/src/views/pages/register/RegisterJWT.vue b/src/views/pages/register/RegisterJWT.vue new file mode 100644 index 0000000..752b460 --- /dev/null +++ b/src/views/pages/register/RegisterJWT.vue @@ -0,0 +1,117 @@ + + + + + + diff --git a/src/views/pages/user-settings/UserSettings.vue b/src/views/pages/user-settings/UserSettings.vue new file mode 100644 index 0000000..cb06e6e --- /dev/null +++ b/src/views/pages/user-settings/UserSettings.vue @@ -0,0 +1,64 @@ + + + + + diff --git a/src/views/pages/user-settings/UserSettingsChangePassword.vue b/src/views/pages/user-settings/UserSettingsChangePassword.vue new file mode 100644 index 0000000..a9e53d9 --- /dev/null +++ b/src/views/pages/user-settings/UserSettingsChangePassword.vue @@ -0,0 +1,30 @@ + + + diff --git a/src/views/pages/user-settings/UserSettingsConnections.vue b/src/views/pages/user-settings/UserSettingsConnections.vue new file mode 100644 index 0000000..65a8ade --- /dev/null +++ b/src/views/pages/user-settings/UserSettingsConnections.vue @@ -0,0 +1,41 @@ + + + diff --git a/src/views/pages/user-settings/UserSettingsGeneral.vue b/src/views/pages/user-settings/UserSettingsGeneral.vue new file mode 100644 index 0000000..3945fbf --- /dev/null +++ b/src/views/pages/user-settings/UserSettingsGeneral.vue @@ -0,0 +1,48 @@ + + + diff --git a/src/views/pages/user-settings/UserSettingsInfo.vue b/src/views/pages/user-settings/UserSettingsInfo.vue new file mode 100644 index 0000000..29907a6 --- /dev/null +++ b/src/views/pages/user-settings/UserSettingsInfo.vue @@ -0,0 +1,79 @@ + + + diff --git a/src/views/pages/user-settings/UserSettingsNotifications.vue b/src/views/pages/user-settings/UserSettingsNotifications.vue new file mode 100644 index 0000000..21a0b23 --- /dev/null +++ b/src/views/pages/user-settings/UserSettingsNotifications.vue @@ -0,0 +1,56 @@ + + + diff --git a/src/views/pages/user-settings/UserSettingsSocialLinks.vue b/src/views/pages/user-settings/UserSettingsSocialLinks.vue new file mode 100644 index 0000000..00843b5 --- /dev/null +++ b/src/views/pages/user-settings/UserSettingsSocialLinks.vue @@ -0,0 +1,37 @@ + + + diff --git a/src/views/personel/Personel.vue b/src/views/personel/Personel.vue new file mode 100644 index 0000000..d96fb50 --- /dev/null +++ b/src/views/personel/Personel.vue @@ -0,0 +1,758 @@ + + + + + diff --git a/src/views/personel/personelTbl.js b/src/views/personel/personelTbl.js new file mode 100644 index 0000000..8cbc867 --- /dev/null +++ b/src/views/personel/personelTbl.js @@ -0,0 +1,13 @@ +import XTbl, {Xtc} from '../../components/x-table/index'; + +const tbl = new XTbl('http://hr.asco-intl.com/back/public/api/personnel', 'لیست پرسنل'); +tbl.add(new Xtc('name', 'نام و نام خانوادگی').filterText()); +tbl.add(new Xtc('fname', 'کد پرسنلی').filterText()) +tbl.add(new Xtc('id', 'شماره بیمه').filterText()) +tbl.add(new Xtc('ncode', 'کد ملی').filterText()) +tbl.add(new Xtc('created_at', 'ثبت نام').filterDate().noSort()) +tbl.add(new Xtc('updated_at', 'به روز رسانی').filterText().noSort()) +tbl.add(new Xtc('operator', 'عملیات').filterSwitch().renderSlot('operator').noSort()) +/*tbl.addOpt()*/ + +export default tbl; diff --git a/src/views/points/ChartPoints.vue b/src/views/points/ChartPoints.vue new file mode 100644 index 0000000..6a15459 --- /dev/null +++ b/src/views/points/ChartPoints.vue @@ -0,0 +1,198 @@ + + + + + diff --git a/src/views/price/AssignPrice.vue b/src/views/price/AssignPrice.vue new file mode 100644 index 0000000..ab8c1d5 --- /dev/null +++ b/src/views/price/AssignPrice.vue @@ -0,0 +1,197 @@ + + + + + + + + + + diff --git a/src/views/price/CategoryPrice.vue b/src/views/price/CategoryPrice.vue new file mode 100644 index 0000000..2ea659d --- /dev/null +++ b/src/views/price/CategoryPrice.vue @@ -0,0 +1,302 @@ + + + + + + + + diff --git a/src/views/price/CollectionPrice.vue b/src/views/price/CollectionPrice.vue new file mode 100644 index 0000000..9187f23 --- /dev/null +++ b/src/views/price/CollectionPrice.vue @@ -0,0 +1,171 @@ + + + + + diff --git a/src/views/price/CreditorList.vue b/src/views/price/CreditorList.vue new file mode 100644 index 0000000..9e999d1 --- /dev/null +++ b/src/views/price/CreditorList.vue @@ -0,0 +1,166 @@ + + + + + + diff --git a/src/views/price/CreditorListModel.js b/src/views/price/CreditorListModel.js new file mode 100644 index 0000000..7d13740 --- /dev/null +++ b/src/views/price/CreditorListModel.js @@ -0,0 +1,12 @@ +import XTbl, {Xtc} from '../../components/x-table/index'; + +const tbl = new XTbl('admin/transaction/creditor', 'لیست مشتریان بستانکار'); +tbl.add(new Xtc('customer.name', 'نام مشتری').filterText()); +tbl.add(new Xtc('customer.mobile', 'شماره مشتری').filterText()); +tbl.add(new Xtc('amount', 'مبلغ').filterNumber()); +tbl.add(new Xtc('customer.shaba_number', 'شماره کارت').filterText()); +tbl.add(new Xtc('caj', 'تاریخ').filterDate()); +tbl.add(new Xtc('opt', 'عملیات').noSort().renderSlot('opt')); + +export default tbl; + diff --git a/src/views/price/DepositPriceList.vue b/src/views/price/DepositPriceList.vue new file mode 100644 index 0000000..dbc6277 --- /dev/null +++ b/src/views/price/DepositPriceList.vue @@ -0,0 +1,175 @@ + + + + + + diff --git a/src/views/price/DepositPriceListModel.js b/src/views/price/DepositPriceListModel.js new file mode 100644 index 0000000..0aed3b5 --- /dev/null +++ b/src/views/price/DepositPriceListModel.js @@ -0,0 +1,15 @@ +import XTbl, {Xtc} from '../../components/x-table/index'; + +const tbl = new XTbl('/admin/transaction/table', 'لیست اسناد واریزی'); +tbl.add(new Xtc('amount', 'مبلغ پرداختی').filterNumber()); +tbl.add(new Xtc('note', 'بابت').filterSelect()); +tbl.add(new Xtc('gateway', 'نام درگاه').filterText()); +tbl.add(new Xtc('track_number', 'شماره پیگیری').filterText()); +tbl.add(new Xtc('reference_id', 'شماره مرجع').filterText()); +tbl.add(new Xtc('customer.mobile', 'واریزکننده').filterText()); +tbl.add(new Xtc('caj', 'زمان').filterDate()); +tbl.add(new Xtc('adv.sts_str', 'وضعیت آگهی').filterSwitch()); +tbl.add(new Xtc('sts_str', 'وضعیت پرداخت').filterSwitch()); + +export default tbl; + diff --git a/src/views/price/EditCollectionPrice.vue b/src/views/price/EditCollectionPrice.vue new file mode 100644 index 0000000..a4b919f --- /dev/null +++ b/src/views/price/EditCollectionPrice.vue @@ -0,0 +1,17 @@ + + + + + \ No newline at end of file diff --git a/src/views/price/IpList.vue b/src/views/price/IpList.vue new file mode 100644 index 0000000..cb80368 --- /dev/null +++ b/src/views/price/IpList.vue @@ -0,0 +1,92 @@ + + + + + + diff --git a/src/views/price/IpListModel.js b/src/views/price/IpListModel.js new file mode 100644 index 0000000..23271dc --- /dev/null +++ b/src/views/price/IpListModel.js @@ -0,0 +1,14 @@ +import XTbl, {Xtc} from '../../components/x-table/index'; + +const tbl = new XTbl('/admin/price/ip', 'مشاهده قیمت امکانات'); +tbl.add(new Xtc('ip', 'نام امکان').filterText()); +tbl.add(new Xtc('active', 'وضعیت').filterSwitch().renderSlot('active')); +tbl.add(new Xtc('city', 'شهر').filterText()); +tbl.add(new Xtc('collection.title', 'دسته').filterText()); +tbl.add(new Xtc('price', 'مبلغ').filterSwitch()); +tbl.add(new Xtc('title', 'عنوان نمایشی').filterText()); +tbl.add(new Xtc('description', 'توضیحات').filterText()); +tbl.add(new Xtc('opt', 'عملیات').renderSlot('opt')); + +export default tbl; + diff --git a/src/views/price/IpcPrice.vue b/src/views/price/IpcPrice.vue new file mode 100644 index 0000000..886b466 --- /dev/null +++ b/src/views/price/IpcPrice.vue @@ -0,0 +1,254 @@ + + + + + + + + diff --git a/src/views/price/IpsList.vue b/src/views/price/IpsList.vue new file mode 100644 index 0000000..f0e2759 --- /dev/null +++ b/src/views/price/IpsList.vue @@ -0,0 +1,95 @@ + + + + + + diff --git a/src/views/price/IpsListModel.js b/src/views/price/IpsListModel.js new file mode 100644 index 0000000..0188b6a --- /dev/null +++ b/src/views/price/IpsListModel.js @@ -0,0 +1,16 @@ +import XTbl, {Xtc} from '../../components/x-table/index'; + +const tbl = new XTbl('/admin/price/ipc', 'لیست قیمت گذاری بسته های آگهی'); +tbl.add(new Xtc('ipc.title', 'نام بسته').filterText()); +tbl.add(new Xtc('active', 'وضعیت').filterSwitch().renderSlot('ac')); +tbl.add(new Xtc('ipc.eaj', 'تاریخ انقضا').filterDate()); +tbl.add(new Xtc('ipc.description', 'توضیح').hidden().filterText()); +tbl.add(new Xtc('city', 'شهر').filterText()); +tbl.add(new Xtc('collection.title', 'دسته').filterText()); +tbl.add(new Xtc('price', 'مبلغ').filterNumber()); +tbl.add(new Xtc('score_c', 'cs').filterNumber()); +tbl.add(new Xtc('score_p', 'ps').filterNumber()); +tbl.add(new Xtc('opt', 'عملیات').renderSlot('opt')); + +export default tbl; + diff --git a/src/views/price/RefundList.vue b/src/views/price/RefundList.vue new file mode 100644 index 0000000..4c79611 --- /dev/null +++ b/src/views/price/RefundList.vue @@ -0,0 +1,61 @@ + + + + + + diff --git a/src/views/price/RefundListModel.js b/src/views/price/RefundListModel.js new file mode 100644 index 0000000..56dbd77 --- /dev/null +++ b/src/views/price/RefundListModel.js @@ -0,0 +1,13 @@ +import XTbl, {Xtc} from '../../components/x-table/index'; + + +const tbl = new XTbl('/admin/findoc/table', 'لیست اسناد بازگشت وجه'); +tbl.add(new Xtc('owner.name', 'دریافت کننده').filterText()); +tbl.add(new Xtc('owner.mobile', 'موبایل').filterText()); +tbl.add(new Xtc('price', 'مبلغ').filterNumber()); +tbl.add(new Xtc('owner.cart_bank_number', 'شماره کارت').filterText()); +tbl.add(new Xtc('fin_doc_number', 'شماره سند حسابداری').filterText()); +tbl.add(new Xtc('title', 'بایت').filterText()); + +export default tbl; + diff --git a/src/views/price/StorePrice.vue b/src/views/price/StorePrice.vue new file mode 100644 index 0000000..f2c81b9 --- /dev/null +++ b/src/views/price/StorePrice.vue @@ -0,0 +1,237 @@ + + + + + + + diff --git a/src/views/price/StorePriceList.vue b/src/views/price/StorePriceList.vue new file mode 100644 index 0000000..295446c --- /dev/null +++ b/src/views/price/StorePriceList.vue @@ -0,0 +1,93 @@ + + + + + + diff --git a/src/views/price/StorePriceListModel.js b/src/views/price/StorePriceListModel.js new file mode 100644 index 0000000..45b6172 --- /dev/null +++ b/src/views/price/StorePriceListModel.js @@ -0,0 +1,10 @@ +import XTbl, {Xtc} from '../../components/x-table/index'; + +const tbl = new XTbl('/admin/price/store', 'لیست قیمت دهی به فروشگاه'); +tbl.add(new Xtc('collection.title', 'دسته').filterText()); +tbl.add(new Xtc('city', 'شهر').filterText()); +tbl.add(new Xtc('price', 'هزینه').filterNumber()); +tbl.add(new Xtc('opt', 'عملیات').renderSlot('opt')); + +export default tbl; + diff --git a/src/views/price/listPrice.vue b/src/views/price/listPrice.vue new file mode 100644 index 0000000..8f9aa74 --- /dev/null +++ b/src/views/price/listPrice.vue @@ -0,0 +1,85 @@ + + + + + diff --git a/src/views/price/listPriceModel.js b/src/views/price/listPriceModel.js new file mode 100644 index 0000000..d87d25a --- /dev/null +++ b/src/views/price/listPriceModel.js @@ -0,0 +1,12 @@ +import XTbl, {Xtc} from '../../components/x-table/index'; + +const tbl = new XTbl('/admin/price/table', 'لیست قیمت بسته های آگهی'); + +tbl.add(new Xtc('collection.title', 'نام دسته').filterText()); +tbl.add(new Xtc('price', 'هزینه').filterNumber()); +tbl.add(new Xtc('ip', 'امکانات').filterText()); +tbl.add(new Xtc('opt', 'عملیات').noSort().renderSlot('opt')); + + +export default tbl; + diff --git a/src/views/proposal/Proposal.vue b/src/views/proposal/Proposal.vue new file mode 100644 index 0000000..6b9a48a --- /dev/null +++ b/src/views/proposal/Proposal.vue @@ -0,0 +1,480 @@ + + + + + diff --git a/src/views/proposal/proposalTbl.js b/src/views/proposal/proposalTbl.js new file mode 100644 index 0000000..48458be --- /dev/null +++ b/src/views/proposal/proposalTbl.js @@ -0,0 +1,14 @@ +import XTbl, {Xtc} from '../../components/x-table/index'; + +const tbl = new XTbl('http://hr.asco-intl.com/back/public/api/proposal', 'لیست درخواست ها'); +tbl.add(new Xtc('name', 'نام و نام خانوادگی').filterText()); +tbl.add(new Xtc('ncode', 'کد ملی').filterText()) +tbl.add(new Xtc('fname', 'موبایل').filterText()) +tbl.add(new Xtc('job_title', 'شغل').filterText()) +tbl.add(new Xtc('for_cities', 'شهر').filterText().noSort()) +tbl.add(new Xtc('created_at', 'ثبت نام').filterDate().noSort()) +tbl.add(new Xtc('updated_at', 'به روز رسانی').filterText().noSort()) +tbl.add(new Xtc('id', 'عملیات').filterSwitch().renderSlot('operator').noSort()) +/*tbl.addOpt()*/ + +export default tbl; diff --git a/src/views/score/ChangeScoreList.vue b/src/views/score/ChangeScoreList.vue new file mode 100644 index 0000000..8395a41 --- /dev/null +++ b/src/views/score/ChangeScoreList.vue @@ -0,0 +1,297 @@ + + + + + + diff --git a/src/views/score/ChangeScoreListModel.js b/src/views/score/ChangeScoreListModel.js new file mode 100644 index 0000000..0e04fca --- /dev/null +++ b/src/views/score/ChangeScoreListModel.js @@ -0,0 +1,15 @@ +import XTbl, {Xtc} from '../../components/x-table/index'; + +const tbl = new XTbl('/admin/exchange/table', 'لیست درخواست های تبدیل وجه'); +tbl.add(new Xtc('customer.name', 'درخواست دهنده').filterText()); +tbl.add(new Xtc('customer.mobile', 'موبایل').filterText()); +tbl.add(new Xtc('amount', 'مبلغ درخواستی').filterNumber()); +tbl.add(new Xtc('customer.score_p', 'امتیاز کل پرداختی').filterNumber()); +tbl.add(new Xtc('caj', 'زمان درخواست').filterDate()); +tbl.add(new Xtc('customer.shaba_number', 'شماره کارت').filterText().hidden()); +tbl.add(new Xtc('customer.total_marketer', 'تعداد بازایاب').filterNumber()); +tbl.add(new Xtc('sts_str', 'وضعیت درخواست').filterSwitch()); +tbl.add(new Xtc('opt', 'عملیات').noSort().renderSlot('opt')); + +export default tbl; + diff --git a/src/views/score/CustomerChangeScoreModel.js b/src/views/score/CustomerChangeScoreModel.js new file mode 100644 index 0000000..f2959ae --- /dev/null +++ b/src/views/score/CustomerChangeScoreModel.js @@ -0,0 +1,15 @@ +import XTbl, {Xtc} from '../../components/x-table/index'; + + +const setModel = (id) =>{ + const tbl = new XTbl(`/admin/exchange/table/${id}`, 'مشاهده گزارشات امتیازات یک کاربر خاص'); + + tbl.add(new Xtc('note', 'نحوه کسب امتیاز').filterText()); + tbl.add(new Xtc('mobile', 'شماره های بازاریابی').filterText()); + tbl.add(new Xtc('total', 'تعداد').filterNumber()); + tbl.add(new Xtc('opt', ' عملیات').noSort().renderSlot('opt')); + return tbl +} + + +export default setModel; diff --git a/src/views/score/CustomerScoreModel.js b/src/views/score/CustomerScoreModel.js new file mode 100644 index 0000000..2063e8f --- /dev/null +++ b/src/views/score/CustomerScoreModel.js @@ -0,0 +1,16 @@ +import XTbl, {Xtc} from '../../components/x-table/index'; + + +const setModel = (id) =>{ + const tbl = new XTbl(`/admin/score/table/${id}`, 'گزارشات امتیازات یک مشتری'); + tbl.add(new Xtc('value_c', 'امتیاز اعتباری').filterNumber()); + tbl.add(new Xtc('value_p', 'امتیاز برداختنی').filterNumber()); + tbl.add(new Xtc('note', 'بابت').filterText()); + tbl.add(new Xtc('caj', 'تاریخ و ساعت').filterDate()); + + return tbl; +} +export default setModel; + + + diff --git a/src/views/score/ScoreList.vue b/src/views/score/ScoreList.vue new file mode 100644 index 0000000..2922c66 --- /dev/null +++ b/src/views/score/ScoreList.vue @@ -0,0 +1,177 @@ + + + + + + diff --git a/src/views/score/ScoreListModel.js b/src/views/score/ScoreListModel.js new file mode 100644 index 0000000..59ec02c --- /dev/null +++ b/src/views/score/ScoreListModel.js @@ -0,0 +1,13 @@ +import XTbl, {Xtc} from '../../components/x-table/index'; +const tbl = new XTbl('/admin/score/table', 'لیست امتیازات مشتریان'); + +tbl.add(new Xtc('owner.mobile', 'شماره مشتری').filterText()); +tbl.add(new Xtc('value_c', 'امتیازاعتباری').filterNumber()); +tbl.add(new Xtc('value_p', 'امتیازپرداختنی').filterNumber()); +tbl.add(new Xtc('note', 'بابت').filterText()); +tbl.add(new Xtc('caj', 'زمان').filterDate()); +tbl.add(new Xtc('adv.collection.title', 'دسته').filterText()); +tbl.add(new Xtc('opt', 'عملیات').noSort().renderSlot('opt')); + +export default tbl; + diff --git a/src/views/store/AddStore.vue b/src/views/store/AddStore.vue new file mode 100644 index 0000000..8f7a8f7 --- /dev/null +++ b/src/views/store/AddStore.vue @@ -0,0 +1,299 @@ + + + + diff --git a/src/views/store/ChartStore.vue b/src/views/store/ChartStore.vue new file mode 100644 index 0000000..b9a87f3 --- /dev/null +++ b/src/views/store/ChartStore.vue @@ -0,0 +1,371 @@ + + + + + diff --git a/src/views/store/ListStore.vue b/src/views/store/ListStore.vue new file mode 100644 index 0000000..3816a59 --- /dev/null +++ b/src/views/store/ListStore.vue @@ -0,0 +1,281 @@ + + + + + + diff --git a/src/views/store/tableStore.js b/src/views/store/tableStore.js new file mode 100644 index 0000000..11dfb45 --- /dev/null +++ b/src/views/store/tableStore.js @@ -0,0 +1,23 @@ +import XTbl,{Xtc} from '../../components/x-table/index'; +const tbl = new XTbl('/admin/store/table', 'لیست فروشگاه ها'); + +tbl.add(new Xtc('title', 'عنوان فروشگاه').filterText()) +tbl.add(new Xtc('collection.title', 'دسته بندی').filterText()) +tbl.add(new Xtc('city', 'شهر').filterText()) +tbl.add(new Xtc('sts_str', 'وضعیت').filterSelect()) +tbl.add(new Xtc('registrar.name', 'مدیرثبت کننده').filterText()) +tbl.add(new Xtc('owner.mobile', 'مشتری ثبت کننده ').filterText()) +tbl.add(new Xtc('customer.mobile', 'ادمین فروشگاه').hidden().filterText()) +tbl.add(new Xtc('count', 'تعدادآگهی فروشگاه').hidden().filterNumber()) +tbl.add(new Xtc('transaction.amount', 'هزینه فروشگاه').filterNumber()) +tbl.add(new Xtc('acceptor.name', 'ناظرفروشگاه').hidden().filterQuery()) +tbl.add(new Xtc('caj', 'تاریخ ثبت فروشگاه').filterDate()) +tbl.add(new Xtc('vaj', 'تاریخ نظارت فروشگاه').hidden().filterDate()) +tbl.add(new Xtc('owner', 'مشتری حذف کننده').hidden().filterText()) +tbl.add(new Xtc('removal.name', 'مدیر حذف کننده').hidden().filterText()) +tbl.add(new Xtc('reason_delete', 'دلیل حذف').hidden().filterText()) +tbl.add(new Xtc('reason_reject', 'دلیل رد').hidden().filterText()) +tbl.add(new Xtc('opt', 'عملیات').noSort().renderSlot('opt')) + +export default tbl; + diff --git a/src/views/transaction/ChartTransAction.vue b/src/views/transaction/ChartTransAction.vue new file mode 100644 index 0000000..624d8b0 --- /dev/null +++ b/src/views/transaction/ChartTransAction.vue @@ -0,0 +1,482 @@ + + + + + diff --git a/src/views/ui-elements/ag-grid-table/AgGridTable.vue b/src/views/ui-elements/ag-grid-table/AgGridTable.vue new file mode 100644 index 0000000..fb271e3 --- /dev/null +++ b/src/views/ui-elements/ag-grid-table/AgGridTable.vue @@ -0,0 +1,207 @@ + + + + + + diff --git a/src/views/ui-elements/ag-grid-table/data.json b/src/views/ui-elements/ag-grid-table/data.json new file mode 100644 index 0000000..f4fbe1f --- /dev/null +++ b/src/views/ui-elements/ag-grid-table/data.json @@ -0,0 +1,7504 @@ +[ + { + "firstname": "Essie", + "lastname": "Vaill", + "company": "Litronic Industries", + "address": "14225 Hancock Dr", + "city": "Anchorage", + "country": "Anchorage", + "state": "AK", + "zip": "99515", + "phone": "907-345-0962", + "fax": "907-345-1215", + "email": "essie@vaill.com", + "web": "http://www.essievaill.com", + "followers": 3574 + }, + { + "firstname": "Cruz", + "lastname": "Roudabush", + "company": "Meridian Products", + "address": "2202 S Central Ave", + "city": "Phoenix", + "country": "Maricopa", + "state": "AZ", + "zip": "85004", + "phone": "602-252-4827", + "fax": "602-252-4009", + "email": "cruz@roudabush.com", + "web": "http://www.cruzroudabush.com", + "followers": 6548 + }, + { + "firstname": "Billie", + "lastname": "Tinnes", + "company": "D & M Plywood Inc", + "address": "28 W 27th St", + "city": "New York", + "country": "New York", + "state": "NY", + "zip": "10001", + "phone": "212-889-5775", + "fax": "212-889-5764", + "email": "billie@tinnes.com", + "web": "http://www.billietinnes.com", + "followers": 3536 + }, + { + "firstname": "Zackary", + "lastname": "Mockus", + "company": "Metropolitan Elevator Co", + "address": "286 State St", + "city": "Perth Amboy", + "country": "Middlesex", + "state": "NJ", + "zip": "08861", + "phone": "732-442-0638", + "fax": "732-442-5218", + "email": "zackary@mockus.com", + "web": "http://www.zackarymockus.com", + "followers": 1497 + }, + { + "firstname": "Rosemarie", + "lastname": "Fifield", + "company": "Technology Services", + "address": "3131 N Nimitz Hwy #-105", + "city": "Honolulu", + "country": "Honolulu", + "state": "HI", + "zip": "96819", + "phone": "808-836-8966", + "fax": "808-836-6008", + "email": "rosemarie@fifield.com", + "web": "http://www.rosemariefifield.com", + "followers": 4812 + }, + { + "firstname": "Bernard", + "lastname": "Laboy", + "company": "Century 21 Keewaydin Prop", + "address": "22661 S Frontage Rd", + "city": "Channahon", + "country": "Will", + "state": "IL", + "zip": "60410", + "phone": "815-467-0487", + "fax": "815-467-1244", + "email": "bernard@laboy.com", + "web": "http://www.bernardlaboy.com", + "followers": 6891 + }, + { + "firstname": "Sue", + "lastname": "Haakinson", + "company": "Kim Peacock Beringhause", + "address": "9617 N Metro Pky W", + "city": "Phoenix", + "country": "Maricopa", + "state": "AZ", + "zip": "85051", + "phone": "602-953-2753", + "fax": "602-953-0355", + "email": "sue@haakinson.com", + "web": "http://www.suehaakinson.com", + "followers": 5787 + }, + { + "firstname": "Valerie", + "lastname": "Pou", + "company": "Sea Port Record One Stop Inc", + "address": "7475 Hamilton Blvd", + "city": "Trexlertown", + "country": "Lehigh", + "state": "PA", + "zip": "18087", + "phone": "610-395-8743", + "fax": "610-395-6995", + "email": "valerie@pou.com", + "web": "http://www.valeriepou.com", + "followers": 8990 + }, + { + "firstname": "Lashawn", + "lastname": "Hasty", + "company": "Kpff Consulting Engineers", + "address": "815 S Glendora Ave", + "city": "West Covina", + "country": "Los Angeles", + "state": "CA", + "zip": "91790", + "phone": "626-960-6738", + "fax": "626-960-1503", + "email": "lashawn@hasty.com", + "web": "http://www.lashawnhasty.com", + "followers": 2131 + }, + { + "firstname": "Marianne", + "lastname": "Earman", + "company": "Albers Technologies Corp", + "address": "6220 S Orange Blossom Trl", + "city": "Orlando", + "country": "Orange", + "state": "FL", + "zip": "32809", + "phone": "407-857-0431", + "fax": "407-857-2506", + "email": "marianne@earman.com", + "web": "http://www.marianneearman.com", + "followers": 1992 + }, + { + "firstname": "Justina", + "lastname": "Dragaj", + "company": "Uchner, David D Esq", + "address": "2552 Poplar Ave", + "city": "Memphis", + "country": "Shelby", + "state": "TN", + "zip": "38112", + "phone": "901-327-5336", + "fax": "901-327-2911", + "email": "justina@dragaj.com", + "web": "http://www.justinadragaj.com", + "followers": 7149 + }, + { + "firstname": "Mandy", + "lastname": "Mcdonnell", + "company": "Southern Vermont Surveys", + "address": "343 Bush St Se", + "city": "Salem", + "country": "Marion", + "state": "OR", + "zip": "97302", + "phone": "503-371-8219", + "fax": "503-371-1118", + "email": "mandy@mcdonnell.com", + "web": "http://www.mandymcdonnell.com", + "followers": 1329 + }, + { + "firstname": "Conrad", + "lastname": "Lanfear", + "company": "Kahler, Karen T Esq", + "address": "49 Roche Way", + "city": "Youngstown", + "country": "Mahoning", + "state": "OH", + "zip": "44512", + "phone": "330-758-0314", + "fax": "330-758-3536", + "email": "conrad@lanfear.com", + "web": "http://www.conradlanfear.com", + "followers": 2906 + }, + { + "firstname": "Cyril", + "lastname": "Behen", + "company": "National Paper & Envelope Corp", + "address": "1650 S Harbor Blvd", + "city": "Anaheim", + "country": "Orange", + "state": "CA", + "zip": "92802", + "phone": "714-772-5050", + "fax": "714-772-3859", + "email": "cyril@behen.com", + "web": "http://www.cyrilbehen.com", + "followers": 7784 + }, + { + "firstname": "Shelley", + "lastname": "Groden", + "company": "Norton, Robert L Esq", + "address": "110 Broadway St", + "city": "San Antonio", + "country": "Bexar", + "state": "TX", + "zip": "78205", + "phone": "210-229-3017", + "fax": "210-229-9757", + "email": "shelley@groden.com", + "web": "http://www.shelleygroden.com", + "followers": 2012 + }, + { + "firstname": "Rosalind", + "lastname": "Krenzke", + "company": "Waldein Manufacturing", + "address": "7000 Bass Lake Rd #-200", + "city": "Minneapolis", + "country": "Hennepin", + "state": "MN", + "zip": "55428", + "phone": "763-537-4194", + "fax": "763-537-3885", + "email": "rosalind@krenzke.com", + "web": "http://www.rosalindkrenzke.com", + "followers": 5547 + }, + { + "firstname": "Davis", + "lastname": "Brevard", + "company": "Transit Trading Corp", + "address": "6715 Tippecanoe Rd", + "city": "Canfield", + "country": "Mahoning", + "state": "OH", + "zip": "44406", + "phone": "330-533-6346", + "fax": "330-533-8211", + "email": "davis@brevard.com", + "web": "http://www.davisbrevard.com", + "followers": 4259 + }, + { + "firstname": "Winnie", + "lastname": "Reich", + "company": "Pacific Seating Co", + "address": "1535 Hawkins Blvd", + "city": "El Paso", + "country": "El Paso", + "state": "TX", + "zip": "79925", + "phone": "915-771-2730", + "fax": "915-771-5729", + "email": "winnie@reich.com", + "web": "http://www.winniereich.com", + "followers": 6621 + }, + { + "firstname": "Trudy", + "lastname": "Worlds", + "company": "Shapiro, Mark R Esq", + "address": "24907 Tibbitts Aven #-b", + "city": "Valencia", + "country": "Los Angeles", + "state": "CA", + "zip": "91355", + "phone": "661-257-3083", + "fax": "661-257-0924", + "email": "trudy@worlds.com", + "web": "http://www.trudyworlds.com", + "followers": 5782 + }, + { + "firstname": "Deshawn", + "lastname": "Inafuku", + "company": "Telair Div Of Teleflex Inc", + "address": "3508 Leopard St", + "city": "Corpus Christi", + "country": "Nueces", + "state": "TX", + "zip": "78408", + "phone": "361-884-8433", + "fax": "361-884-3985", + "email": "deshawn@inafuku.com", + "web": "http://www.deshawninafuku.com", + "followers": 1195 + }, + { + "firstname": "Claudio", + "lastname": "Loose", + "company": "Audiotek Electronics", + "address": "286 State St", + "city": "Perth Amboy", + "country": "Middlesex", + "state": "NJ", + "zip": "08861", + "phone": "732-442-8514", + "fax": "732-442-1775", + "email": "claudio@loose.com", + "web": "http://www.claudioloose.com", + "followers": 6043 + }, + { + "firstname": "Sal", + "lastname": "Pindell", + "company": "Wrigley, Robert I Esq", + "address": "1112 Se 1st St", + "city": "Evansville", + "country": "Vanderburgh", + "state": "IN", + "zip": "47713", + "phone": "812-421-4804", + "fax": "812-421-7625", + "email": "sal@pindell.com", + "web": "http://www.salpindell.com", + "followers": 4359 + }, + { + "firstname": "Cristina", + "lastname": "Sharper", + "company": "Tax Office", + "address": "111 W 40th St", + "city": "New York", + "country": "New York", + "state": "NY", + "zip": "10018", + "phone": "212-719-3952", + "fax": "212-719-0754", + "email": "cristina@sharper.com", + "web": "http://www.cristinasharper.com", + "followers": 4823 + }, + { + "firstname": "Betty Jane", + "lastname": "Mccamey", + "company": "Vita Foods Inc", + "address": "100 E Broad St", + "city": "Columbus", + "country": "Franklin", + "state": "OH", + "zip": "43215", + "phone": "614-225-0900", + "fax": "614-225-1612", + "email": "cary@mccamey.com", + "web": "http://www.carymccamey.com", + "followers": 8863 + }, + { + "firstname": "Haley", + "lastname": "Rocheford", + "company": "Davis, Robert L Esq", + "address": "6030 Greenwood Plaza Blvd", + "city": "Englewood", + "country": "Arapahoe", + "state": "CO", + "zip": "80111", + "phone": "303-689-7729", + "fax": "303-689-5219", + "email": "haley@rocheford.com", + "web": "http://www.haleyrocheford.com", + "followers": 9872 + }, + { + "firstname": "Dorothea", + "lastname": "Sweem", + "company": "Ehrmann, Rolfe F Esq", + "address": "100 Thanet Circ", + "city": "Trenton", + "country": "Mercer", + "state": "NJ", + "zip": "08648", + "phone": "609-896-5871", + "fax": "609-896-2099", + "email": "dorothea@sweem.com", + "web": "http://www.dorotheasweem.com", + "followers": 8897 + }, + { + "firstname": "Fannie", + "lastname": "Steese", + "company": "Chiapete, W Richard Esq", + "address": "926 E Park Ave", + "city": "Tallahassee", + "country": "Leon", + "state": "FL", + "zip": "32301", + "phone": "850-222-8103", + "fax": "850-222-0105", + "email": "fannie@steese.com", + "web": "http://www.fanniesteese.com", + "followers": 7140 + }, + { + "firstname": "Allyson", + "lastname": "Gillispie", + "company": "De Friese Theo & Sons", + "address": "1722 White Horse Mercerville R", + "city": "Trenton", + "country": "Mercer", + "state": "NJ", + "zip": "08619", + "phone": "609-584-1794", + "fax": "609-584-0645", + "email": "allyson@gillispie.com", + "web": "http://www.allysongillispie.com", + "followers": 1414 + }, + { + "firstname": "Roger", + "lastname": "Seid", + "company": "Yoshida, Gerald C Esq", + "address": "3738 N Monroe St", + "city": "Tallahassee", + "country": "Leon", + "state": "FL", + "zip": "32303", + "phone": "850-422-1535", + "fax": "850-422-8152", + "email": "roger@seid.com", + "web": "http://www.rogerseid.com", + "followers": 6661 + }, + { + "firstname": "Dollie", + "lastname": "Daquino", + "company": "Jd Edwards & Co", + "address": "1005 Congress Ave", + "city": "Austin", + "country": "Travis", + "state": "TX", + "zip": "78701", + "phone": "512-478-9636", + "fax": "512-478-9874", + "email": "dollie@daquino.com", + "web": "http://www.dolliedaquino.com", + "followers": 5262 + }, + { + "firstname": "Eva", + "lastname": "Seahorn", + "company": "Saunders Appraisal Inc", + "address": "3 Northern Blvd", + "city": "Amherst", + "country": "Hillsborough", + "state": "NH", + "zip": "03031", + "phone": "603-673-6072", + "fax": "603-673-5009", + "email": "eva@seahorn.com", + "web": "http://www.evaseahorn.com", + "followers": 9192 + }, + { + "firstname": "Mamie", + "lastname": "Mcintee", + "company": "Jacobs, Brian Realtor", + "address": "2810 Jacobs Ave", + "city": "Eureka", + "country": "Humboldt", + "state": "CA", + "zip": "95501", + "phone": "707-443-0621", + "fax": "707-443-9147", + "email": "mamie@mcintee.com", + "web": "http://www.mamiemcintee.com", + "followers": 6954 + }, + { + "firstname": "Lyndon", + "lastname": "Bellerdine", + "company": "A B C Lock & Key", + "address": "200 California St", + "city": "San Francisco", + "country": "San Francisco", + "state": "CA", + "zip": "94111", + "phone": "415-705-1956", + "fax": "415-705-2887", + "email": "lyndon@bellerdine.com", + "web": "http://www.lyndonbellerdine.com", + "followers": 146 + }, + { + "firstname": "Lashonda", + "lastname": "Derouen", + "company": "Travel Agent Magazine", + "address": "101 Royal St", + "city": "Alexandria", + "country": "Alexandria City", + "state": "VA", + "zip": "22314", + "phone": "703-684-3394", + "fax": "703-684-0307", + "email": "lashonda@derouen.com", + "web": "http://www.lashondaderouen.com", + "followers": 3792 + }, + { + "firstname": "Jacklyn", + "lastname": "Emayo", + "company": "Super 8 Motel Temple", + "address": "101 Us Highway 46", + "city": "Fairfield", + "country": "Essex", + "state": "NJ", + "zip": "07004", + "phone": "973-882-3960", + "fax": "973-882-1908", + "email": "jacklyn@emayo.com", + "web": "http://www.jacklynemayo.com", + "followers": 4575 + }, + { + "firstname": "Rubin", + "lastname": "Crotts", + "company": "Misko, Charles G Esq", + "address": "303 N Indian Canyon Dr", + "city": "Palm Springs", + "country": "Riverside", + "state": "CA", + "zip": "92262", + "phone": "760-327-0337", + "fax": "760-327-0929", + "email": "rubin@crotts.com", + "web": "http://www.rubincrotts.com", + "followers": 4736 + }, + { + "firstname": "Boris", + "lastname": "Catino", + "company": "Dream Homes Usa Inc", + "address": "645 Church St", + "city": "Norfolk", + "country": "Norfolk City", + "state": "VA", + "zip": "23510", + "phone": "757-627-8408", + "fax": "757-627-6195", + "email": "boris@catino.com", + "web": "http://www.boriscatino.com", + "followers": 2330 + }, + { + "firstname": "Jannie", + "lastname": "Bowditch", + "company": "Lindsays Landing Rv Pk & Mrna", + "address": "1102 Main St", + "city": "Grandview", + "country": "Jackson", + "state": "MO", + "zip": "64030", + "phone": "816-765-0961", + "fax": "816-765-3469", + "email": "jannie@bowditch.com", + "web": "http://www.janniebowditch.com", + "followers": 7302 + }, + { + "firstname": "Colin", + "lastname": "Altonen", + "company": "Smith, Arthur D Esq", + "address": "1201 18th St", + "city": "Denver", + "country": "Denver", + "state": "CO", + "zip": "80202", + "phone": "303-292-5477", + "fax": "303-292-4239", + "email": "colin@altonen.com", + "web": "http://www.colinaltonen.com", + "followers": 2587 + }, + { + "firstname": "Kerry", + "lastname": "Evertt", + "company": "Washington Crossing Inn", + "address": "337 S North Lake Blvd", + "city": "Altamonte Springs", + "country": "Seminole", + "state": "FL", + "zip": "32701", + "phone": "407-332-9851", + "fax": "407-332-1718", + "email": "kerry@evertt.com", + "web": "http://www.kerryevertt.com", + "followers": 6663 + }, + { + "firstname": "Kathie", + "lastname": "Argenti", + "company": "Microtel Franchise & Dev Corp", + "address": "410 Front St", + "city": "Brainerd", + "country": "Crow Wing", + "state": "MN", + "zip": "56401", + "phone": "218-828-9253", + "fax": "218-828-1401", + "email": "kathie@argenti.com", + "web": "http://www.kathieargenti.com", + "followers": 6260 + }, + { + "firstname": "Henrietta", + "lastname": "Cintora", + "company": "Keyes, Judith Droz Esq", + "address": "1063 Fm Wzzw", + "city": "Milton", + "country": "Cabell", + "state": "WV", + "zip": "25541", + "phone": "304-743-5440", + "fax": "304-743-7475", + "email": "henrietta@cintora.com", + "web": "http://www.henriettacintora.com", + "followers": 9622 + }, + { + "firstname": "Mariano", + "lastname": "Maury", + "company": "Donut & Sandwich Shop", + "address": "1092 Saint Georges Ave", + "city": "Rahway", + "country": "Union", + "state": "NJ", + "zip": "07065", + "phone": "732-388-1579", + "fax": "732-388-9355", + "email": "mariano@maury.com", + "web": "http://www.marianomaury.com", + "followers": 6254 + }, + { + "firstname": "Lottie", + "lastname": "Voll", + "company": "Mason, Joseph G Esq", + "address": "55 E 10th Ave", + "city": "Eugene", + "country": "Lane", + "state": "OR", + "zip": "97401", + "phone": "541-342-7282", + "fax": "541-342-4657", + "email": "lottie@voll.com", + "web": "http://www.lottievoll.com", + "followers": 1092 + }, + { + "firstname": "Ofelia", + "lastname": "Sheffler", + "company": "Rimpsey Agency", + "address": "628 Pacific Ave", + "city": "Oxnard", + "country": "Ventura", + "state": "CA", + "zip": "93030", + "phone": "805-483-7161", + "fax": "805-483-5693", + "email": "ofelia@sheffler.com", + "web": "http://www.ofeliasheffler.com", + "followers": 1096 + }, + { + "firstname": "Gaston", + "lastname": "Cieloszyk", + "company": "Center For Hope Hospice Inc", + "address": "1160 Wccs", + "city": "Homer City", + "country": "Indiana", + "state": "PA", + "zip": "15748", + "phone": "724-479-0355", + "fax": "724-479-7077", + "email": "gaston@cieloszyk.com", + "web": "http://www.gastoncieloszyk.com", + "followers": 7409 + }, + { + "firstname": "Karla", + "lastname": "Ken", + "company": "Nicollet Process Engineering", + "address": "2135 11th St", + "city": "Rockford", + "country": "Winnebago", + "state": "IL", + "zip": "61104", + "phone": "815-968-0369", + "fax": "815-968-7904", + "email": "karla@ken.com", + "web": "http://www.karlaken.com", + "followers": 1296 + }, + { + "firstname": "Avery", + "lastname": "Parbol", + "company": "Schlackman, William H", + "address": "22343 Se Stark St", + "city": "Gresham", + "country": "Multnomah", + "state": "OR", + "zip": "97030", + "phone": "503-666-1948", + "fax": "503-666-9241", + "email": "avery@parbol.com", + "web": "http://www.averyparbol.com", + "followers": 3515 + }, + { + "firstname": "John", + "lastname": "Chipley", + "company": "Manpower Temporary Services", + "address": "2 Horizon Rd #-2", + "city": "Fort Lee", + "country": "Bergen", + "state": "NJ", + "zip": "07024", + "phone": "201-224-7741", + "fax": "201-224-7282", + "email": "john@chipley.com", + "web": "http://www.johnchipley.com", + "followers": 7710 + }, + { + "firstname": "Luella", + "lastname": "Pliner", + "company": "United Waste Systems", + "address": "3437 N 12th Ave", + "city": "Pensacola", + "country": "Escambia", + "state": "FL", + "zip": "32503", + "phone": "850-434-2521", + "fax": "850-434-5228", + "email": "luella@pliner.com", + "web": "http://www.luellapliner.com", + "followers": 5191 + }, + { + "firstname": "Elvira", + "lastname": "Blumenthal", + "company": "Stell Mortgage Investors", + "address": "108 Washington St", + "city": "Keokuk", + "country": "Lee", + "state": "IA", + "zip": "52632", + "phone": "319-524-6237", + "fax": "319-524-9435", + "email": "elvira@blumenthal.com", + "web": "http://www.elvirablumenthal.com", + "followers": 6616 + }, + { + "firstname": "Tyree", + "lastname": "Courrege", + "company": "Stitch Craft", + "address": "13201 Northwest Fwy", + "city": "Houston", + "country": "Harris", + "state": "TX", + "zip": "77040", + "phone": "713-690-9216", + "fax": "713-690-4043", + "email": "tyree@courrege.com", + "web": "http://www.tyreecourrege.com", + "followers": 5210 + }, + { + "firstname": "Ramon", + "lastname": "Amaral", + "company": "Air Academy Federal Credit Un", + "address": "700 W Highway 287", + "city": "Lander", + "country": "Fremont", + "state": "WY", + "zip": "82520", + "phone": "307-332-2667", + "fax": "307-332-3893", + "email": "ramon@amaral.com", + "web": "http://www.ramonamaral.com", + "followers": 8659 + }, + { + "firstname": "Wilfredo", + "lastname": "Gidley", + "company": "Mclaughlin, John F Esq", + "address": "2255 Kuhio Ave #-1203", + "city": "Honolulu", + "country": "Honolulu", + "state": "HI", + "zip": "96815", + "phone": "808-924-2610", + "fax": "808-924-7666", + "email": "wilfredo@gidley.com", + "web": "http://www.wilfredogidley.com", + "followers": 8860 + }, + { + "firstname": "Gracie", + "lastname": "Ehn", + "company": "P C Systems", + "address": "Kahala", + "city": "Honolulu", + "country": "Honolulu", + "state": "HI", + "zip": "96816", + "phone": "808-247-8624", + "fax": "808-247-7982", + "email": "gracie@ehn.com", + "web": "http://www.gracieehn.com", + "followers": 2870 + }, + { + "firstname": "Dorthy", + "lastname": "Alexy", + "company": "Frank Siviglia & Co", + "address": "Pearlridge", + "city": "Aiea", + "country": "Honolulu", + "state": "HI", + "zip": "96701", + "phone": "808-247-4421", + "fax": "808-247-7192", + "email": "dorthy@alexy.com", + "web": "http://www.dorthyalexy.com", + "followers": 1029 + }, + { + "firstname": "Bertie", + "lastname": "Luby", + "company": "Puckett, Dennis L Esq", + "address": "Windward", + "city": "Kaneohe", + "country": "Honolulu", + "state": "HI", + "zip": "96744", + "phone": "808-247-8062", + "fax": "808-247-2529", + "email": "bertie@luby.com", + "web": "http://www.bertieluby.com", + "followers": 2660 + }, + { + "firstname": "Rudy", + "lastname": "Kuhle", + "company": "General Insurcorp Inc", + "address": "1418 3rd Ave", + "city": "New York", + "country": "New York", + "state": "NY", + "zip": "10028", + "phone": "212-628-9987", + "fax": "212-628-1234", + "email": "rudy@kuhle.com", + "web": "http://www.rudykuhle.com", + "followers": 7201 + }, + { + "firstname": "Gale", + "lastname": "Nolau", + "company": "Lust, C James Esq", + "address": "104 N Aurora St", + "city": "Ithaca", + "country": "Tompkins", + "state": "NY", + "zip": "14850", + "phone": "607-277-1567", + "fax": "607-277-6524", + "email": "gale@nolau.com", + "web": "http://www.galenolau.com", + "followers": 6842 + }, + { + "firstname": "Kenya", + "lastname": "Bruni", + "company": "Hurley, Thomas J Jr", + "address": "280 N Midland Ave", + "city": "Saddle Brook", + "country": "Bergen", + "state": "NJ", + "zip": "07663", + "phone": "201-646-9077", + "fax": "201-646-8526", + "email": "kenya@bruni.com", + "web": "http://www.kenyabruni.com", + "followers": 9368 + }, + { + "firstname": "Tricia", + "lastname": "Kruss", + "company": "Edwards, Elwood L", + "address": "4685 Ne 14th St", + "city": "Des Moines", + "country": "Polk", + "state": "IA", + "zip": "50313", + "phone": "515-262-3267", + "fax": "515-262-6264", + "email": "tricia@kruss.com", + "web": "http://www.triciakruss.com", + "followers": 9671 + }, + { + "firstname": "Mack", + "lastname": "Jurasin", + "company": "Sherman, Michael D Esq", + "address": "1180 Dora Hwy", + "city": "Pulaski", + "country": "Pulaski", + "state": "VA", + "zip": "24301", + "phone": "540-980-4958", + "fax": "540-980-2978", + "email": "mack@jurasin.com", + "web": "http://www.mackjurasin.com", + "followers": 4557 + }, + { + "firstname": "Margarito", + "lastname": "Kornbau", + "company": "Acker Knitting Mills Inc", + "address": "303 W 15th St", + "city": "Austin", + "country": "Travis", + "state": "TX", + "zip": "78701", + "phone": "512-478-0371", + "fax": "512-478-4449", + "email": "margarito@kornbau.com", + "web": "http://www.margaritokornbau.com", + "followers": 2072 + }, + { + "firstname": "Lucien", + "lastname": "Iurato", + "company": "Anderson Consulting", + "address": "3918 16th Ave", + "city": "Brooklyn", + "country": "Kings", + "state": "NY", + "zip": "11218", + "phone": "718-871-7952", + "fax": "718-871-3483", + "email": "lucien@iurato.com", + "web": "http://www.lucieniurato.com", + "followers": 9434 + }, + { + "firstname": "Jarvis", + "lastname": "Galas", + "company": "Younghans & Burke", + "address": "307 E President St", + "city": "Savannah", + "country": "Chatham", + "state": "GA", + "zip": "31401", + "phone": "912-236-8524", + "fax": "912-236-8705", + "email": "jarvis@galas.com", + "web": "http://www.jarvisgalas.com", + "followers": 2359 + }, + { + "firstname": "Billie", + "lastname": "Cowley", + "company": "Spears, Robert M Esq", + "address": "1700 Street Rd", + "city": "Warrington", + "country": "Bucks", + "state": "PA", + "zip": "18976", + "phone": "215-548-0842", + "fax": "215-548-4706", + "email": "billie@cowley.com", + "web": "http://www.billiecowley.com", + "followers": 2416 + }, + { + "firstname": "Jacinto", + "lastname": "Gawron", + "company": "Matt Kokkonen Insurance Agency", + "address": "1740 House", + "city": "Lumberville", + "country": "Bucks", + "state": "PA", + "zip": "18933", + "phone": "215-297-0120", + "fax": "215-297-5442", + "email": "jacinto@gawron.com", + "web": "http://www.jacintogawron.com", + "followers": 310 + }, + { + "firstname": "Randall", + "lastname": "Kluemper", + "company": "Lifestyles Organization", + "address": "Rt 16", + "city": "North Conway", + "country": "Carroll", + "state": "NH", + "zip": "03860", + "phone": "603-356-3217", + "fax": "603-356-6174", + "email": "randall@kluemper.com", + "web": "http://www.randallkluemper.com", + "followers": 5669 + }, + { + "firstname": "Enrique", + "lastname": "Oroark", + "company": "Callaghan, Kathleen M Esq", + "address": "34 W 17th St", + "city": "New York", + "country": "New York", + "state": "NY", + "zip": "10011", + "phone": "212-366-5568", + "fax": "212-366-6877", + "email": "enrique@oroark.com", + "web": "http://www.enriqueoroark.com", + "followers": 3911 + }, + { + "firstname": "Alva", + "lastname": "Pennigton", + "company": "Citizens Savings Bank", + "address": "1275 country Road 210 W", + "city": "Jacksonville", + "country": "Saint Johns", + "state": "FL", + "zip": "32259", + "phone": "904-260-2345", + "fax": "904-260-3735", + "email": "alva@pennigton.com", + "web": "http://www.alvapennigton.com", + "followers": 7564 + }, + { + "firstname": "Socorro", + "lastname": "Balandran", + "company": "Mooring", + "address": "401 S Main St", + "city": "Greensburg", + "country": "Westmoreland", + "state": "PA", + "zip": "15601", + "phone": "724-834-6908", + "fax": "724-834-8831", + "email": "socorro@balandran.com", + "web": "http://www.socorrobalandran.com", + "followers": 7056 + }, + { + "firstname": "Nadia", + "lastname": "Wilshire", + "company": "Midwest Undercar Distributors", + "address": "1801 West Ave S", + "city": "La Crosse", + "country": "La Crosse", + "state": "WI", + "zip": "54601", + "phone": "608-788-4965", + "fax": "608-788-5946", + "email": "nadia@wilshire.com", + "web": "http://www.nadiawilshire.com", + "followers": 9311 + }, + { + "firstname": "Reginald", + "lastname": "Humes", + "company": "Cowley & Chidester", + "address": "44 N Main St", + "city": "Wolfeboro", + "country": "Carroll", + "state": "NH", + "zip": "03894", + "phone": "603-569-7730", + "fax": "603-569-8142", + "email": "reginald@humes.com", + "web": "http://www.reginaldhumes.com", + "followers": 8347 + }, + { + "firstname": "Lynda", + "lastname": "Caraway", + "company": "Lowe Art Museum", + "address": "1822 Spring Garden St", + "city": "Philadelphia", + "country": "Philadelphia", + "state": "PA", + "zip": "19130", + "phone": "215-564-3171", + "fax": "215-564-2241", + "email": "lynda@caraway.com", + "web": "http://www.lyndacaraway.com", + "followers": 3853 + }, + { + "firstname": "Saundra", + "lastname": "Mcaulay", + "company": "Rcf Inc", + "address": "2401 Cleveland Rd W", + "city": "Huron", + "country": "Erie", + "state": "OH", + "zip": "44839", + "phone": "419-433-5558", + "fax": "419-433-9756", + "email": "saundra@mcaulay.com", + "web": "http://www.saundramcaulay.com", + "followers": 1620 + }, + { + "firstname": "Allan", + "lastname": "Schwantd", + "company": "Micro Wire Products", + "address": "406 Ne 3rd St", + "city": "McMinnville", + "country": "Yamhill", + "state": "OR", + "zip": "97128", + "phone": "503-434-9666", + "fax": "503-434-3863", + "email": "allan@schwantd.com", + "web": "http://www.allanschwantd.com", + "followers": 6069 + }, + { + "firstname": "Wilmer", + "lastname": "Constantineau", + "company": "Nutra Source", + "address": "1745 W 18th Ave", + "city": "Eugene", + "country": "Lane", + "state": "OR", + "zip": "97402", + "phone": "541-345-4729", + "fax": "541-345-4884", + "email": "wilmer@constantineau.com", + "web": "http://www.wilmerconstantineau.com", + "followers": 1648 + }, + { + "firstname": "Savannah", + "lastname": "Kesich", + "company": "Wbnd Am", + "address": "221 Main", + "city": "Park City", + "country": "Summit", + "state": "UT", + "zip": "84060", + "phone": "435-645-0986", + "fax": "435-645-9504", + "email": "savannah@kesich.com", + "web": "http://www.savannahkesich.com", + "followers": 7325 + }, + { + "firstname": "Dwain", + "lastname": "Cuttitta", + "company": "Kintech Stamping Inc", + "address": "1919 Connecticut Ave Nw", + "city": "Washington", + "country": "District of Columbia", + "state": "DC", + "zip": "20009", + "phone": "202-265-7854", + "fax": "202-265-9475", + "email": "dwain@cuttitta.com", + "web": "http://www.dwaincuttitta.com", + "followers": 8300 + }, + { + "firstname": "Krystle", + "lastname": "Stika", + "company": "Signature Inn", + "address": "3730 Fm", + "city": "Houston", + "country": "Harris", + "state": "TX", + "zip": "77068", + "phone": "281-537-5324", + "fax": "281-537-3235", + "email": "krystle@stika.com", + "web": "http://www.krystlestika.com", + "followers": 2603 + }, + { + "firstname": "Felipe", + "lastname": "Gould", + "company": "Black, Ronald H", + "address": "2308 Bienville Blvd", + "city": "Ocean Springs", + "country": "Jackson", + "state": "MS", + "zip": "39564", + "phone": "228-875-2811", + "fax": "228-875-6402", + "email": "felipe@gould.com", + "web": "http://www.felipegould.com", + "followers": 9237 + }, + { + "firstname": "Steve", + "lastname": "Schorr", + "company": "Midwest Fire Protection Inc", + "address": "1810 N King St", + "city": "Honolulu", + "country": "Honolulu", + "state": "HI", + "zip": "96819", + "phone": "808-842-7045", + "fax": "808-842-7338", + "email": "steve@schorr.com", + "web": "http://www.steveschorr.com", + "followers": 1468 + }, + { + "firstname": "Naomi", + "lastname": "Caetano", + "company": "Bashlin Industries Inc", + "address": "50 Spring St #-1", + "city": "Cresskill", + "country": "Bergen", + "state": "NJ", + "zip": "07626", + "phone": "201-569-3572", + "fax": "201-569-5795", + "email": "naomi@caetano.com", + "web": "http://www.naomicaetano.com", + "followers": 1743 + }, + { + "firstname": "Melody", + "lastname": "Saddat", + "company": "Richards, Edward W Esq", + "address": "3540 S 84th St", + "city": "Omaha", + "country": "Douglas", + "state": "NE", + "zip": "68124", + "phone": "402-397-0581", + "fax": "402-397-8391", + "email": "melody@saddat.com", + "web": "http://www.melodysaddat.com", + "followers": 2442 + }, + { + "firstname": "Mitchel", + "lastname": "Harnar", + "company": "Copycat Quick Print", + "address": "1810 Pioneer Ave", + "city": "Cheyenne", + "country": "Laramie", + "state": "WY", + "zip": "82001", + "phone": "307-632-0256", + "fax": "307-632-2516", + "email": "mitchel@harnar.com", + "web": "http://www.mitchelharnar.com", + "followers": 4662 + }, + { + "firstname": "Sharlene", + "lastname": "Circelli", + "company": "Calibron Systems Inc", + "address": "4018 W Clearwater Ave", + "city": "Kennewick", + "country": "Benton", + "state": "WA", + "zip": "99336", + "phone": "509-783-5167", + "fax": "509-783-7346", + "email": "sharlene@circelli.com", + "web": "http://www.sharlenecircelli.com", + "followers": 6539 + }, + { + "firstname": "Sean", + "lastname": "Bonnet", + "company": "Corporate Alternatives Inc", + "address": "3043 Ridge Rd", + "city": "Lansing", + "country": "Cook", + "state": "IL", + "zip": "60438", + "phone": "708-474-4766", + "fax": "708-474-0011", + "email": "sean@bonnet.com", + "web": "http://www.seanbonnet.com", + "followers": 867 + }, + { + "firstname": "Travis", + "lastname": "Brockert", + "company": "Santa Cruz Title Co", + "address": "7828 N 19th Ave", + "city": "Phoenix", + "country": "Maricopa", + "state": "AZ", + "zip": "85021", + "phone": "602-995-1362", + "fax": "602-995-0966", + "email": "travis@brockert.com", + "web": "http://www.travisbrockert.com", + "followers": 7421 + }, + { + "firstname": "Candice", + "lastname": "Bruckman", + "company": "Fernando Foods Inc", + "address": "611 1st Ave N", + "city": "Humboldt", + "country": "Humboldt", + "state": "IA", + "zip": "50548", + "phone": "515-332-0809", + "fax": "515-332-9083", + "email": "candice@bruckman.com", + "web": "http://www.candicebruckman.com", + "followers": 7084 + }, + { + "firstname": "Mabel", + "lastname": "Weeden", + "company": "Pepsi Cola Gen Bottlers Inc", + "address": "300 E Phillips St", + "city": "Richardson", + "country": "Dallas", + "state": "TX", + "zip": "75081", + "phone": "972-235-5619", + "fax": "972-235-1843", + "email": "mabel@weeden.com", + "web": "http://www.mabelweeden.com", + "followers": 2674 + }, + { + "firstname": "Armando", + "lastname": "Papik", + "company": "Cryogenic Society Of America", + "address": "615 W Markham St", + "city": "Little Rock", + "country": "Pulaski", + "state": "AR", + "zip": "72201", + "phone": "501-376-4154", + "fax": "501-376-0608", + "email": "armando@papik.com", + "web": "http://www.armandopapik.com", + "followers": 7152 + }, + { + "firstname": "Kevin", + "lastname": "Edd", + "company": "Peebles, William J Esq", + "address": "64 Dyerville Ave", + "city": "Johnston", + "country": "Providence", + "state": "RI", + "zip": "02919", + "phone": "401-453-8514", + "fax": "401-453-7085", + "email": "kevin@edd.com", + "web": "http://www.kevinedd.com", + "followers": 3568 + }, + { + "firstname": "Raphael", + "lastname": "Bickel", + "company": "S Shamash & Sons Inc", + "address": "550 N Brand Blvd #-800", + "city": "Glendale", + "country": "Los Angeles", + "state": "CA", + "zip": "91203", + "phone": "818-246-1195", + "fax": "818-246-4734", + "email": "raphael@bickel.com", + "web": "http://www.raphaelbickel.com", + "followers": 1365 + }, + { + "firstname": "Darren", + "lastname": "Merlin", + "company": "Pozzuolo & Perkiss Pc", + "address": "550 N Edward St", + "city": "Decatur", + "country": "Macon", + "state": "IL", + "zip": "62522", + "phone": "217-428-0453", + "fax": "217-428-1491", + "email": "darren@merlin.com", + "web": "http://www.darrenmerlin.com", + "followers": 7653 + }, + { + "firstname": "Francis", + "lastname": "Soo", + "company": "Allen Industrial Supply", + "address": "218 W Main St", + "city": "Sparta", + "country": "Monroe", + "state": "WI", + "zip": "54656", + "phone": "608-269-7306", + "fax": "608-269-3359", + "email": "francis@soo.com", + "web": "http://www.francissoo.com", + "followers": 2482 + }, + { + "firstname": "Nelly", + "lastname": "Jakuboski", + "company": "Hammerman, Stanley M Esq", + "address": "103 Main St", + "city": "Ridgefield", + "country": "Fairfield", + "state": "CT", + "zip": "06877", + "phone": "203-438-9250", + "fax": "203-438-5109", + "email": "nelly@jakuboski.com", + "web": "http://www.nellyjakuboski.com", + "followers": 5338 + }, + { + "firstname": "Mitzi", + "lastname": "Ihenyen", + "company": "Helm, Norman O", + "address": "979 3rd Ave", + "city": "New York", + "country": "New York", + "state": "NY", + "zip": "10022", + "phone": "212-838-8303", + "fax": "212-838-3221", + "email": "mitzi@ihenyen.com", + "web": "http://www.mitziihenyen.com", + "followers": 9264 + }, + { + "firstname": "Kathleen", + "lastname": "Beresnyak", + "company": "R & E Associates", + "address": "100 W 25th Ave", + "city": "San Mateo", + "country": "San Mateo", + "state": "CA", + "zip": "94403", + "phone": "650-349-6809", + "fax": "650-349-5962", + "email": "kathleen@beresnyak.com", + "web": "http://www.kathleenberesnyak.com", + "followers": 2853 + }, + { + "firstname": "Adela", + "lastname": "Cervantsz", + "company": "Arizona Awards", + "address": "102 5th St N", + "city": "Clanton", + "country": "Chilton", + "state": "AL", + "zip": "35045", + "phone": "205-755-4137", + "fax": "205-755-1034", + "email": "adela@cervantsz.com", + "web": "http://www.adelacervantsz.com", + "followers": 9876 + }, + { + "firstname": "Randal", + "lastname": "Gansen", + "company": "Quik Print", + "address": "1 First Federal Plz", + "city": "Rochester", + "country": "Monroe", + "state": "NY", + "zip": "14614", + "phone": "585-238-8558", + "fax": "585-238-7764", + "email": "randal@gansen.com", + "web": "http://www.randalgansen.com", + "followers": 4019 + }, + { + "firstname": "Alyssa", + "lastname": "Biasotti", + "company": "Johnson Hardware Co", + "address": "22 James St", + "city": "Middletown", + "country": "Orange", + "state": "NY", + "zip": "10940", + "phone": "845-343-1878", + "fax": "845-343-5354", + "email": "alyssa@biasotti.com", + "web": "http://www.alyssabiasotti.com", + "followers": 3684 + }, + { + "firstname": "Janet", + "lastname": "Schaffter", + "company": "Hall, Camden M Esq", + "address": "131 Rimbach St", + "city": "Hammond", + "country": "Lake", + "state": "IN", + "zip": "46320", + "phone": "219-853-9283", + "fax": "219-853-9329", + "email": "janet@schaffter.com", + "web": "http://www.janetschaffter.com", + "followers": 2431 + }, + { + "firstname": "Armando", + "lastname": "Kolm", + "company": "Cooper & Cooper Cpas", + "address": "201 N Main St", + "city": "Anderson", + "country": "Anderson", + "state": "SC", + "zip": "29621", + "phone": "864-260-3642", + "fax": "864-260-9205", + "email": "armando@kolm.com", + "web": "http://www.armandokolm.com", + "followers": 4357 + }, + { + "firstname": "Gil", + "lastname": "Scarpa", + "company": "Hughes, James D Esq", + "address": "12 E Broad St", + "city": "Hazleton", + "country": "Luzerne", + "state": "PA", + "zip": "18201", + "phone": "570-459-9281", + "fax": "570-459-5191", + "email": "gil@scarpa.com", + "web": "http://www.gilscarpa.com", + "followers": 7691 + }, + { + "firstname": "Vanessa", + "lastname": "Lewallen", + "company": "Fargo Glass & Paint Co", + "address": "5 E Main", + "city": "Centerburg", + "country": "Knox", + "state": "OH", + "zip": "43011", + "phone": "740-625-8098", + "fax": "740-625-1696", + "email": "vanessa@lewallen.com", + "web": "http://www.vanessalewallen.com", + "followers": 2710 + }, + { + "firstname": "Burton", + "lastname": "Brining", + "company": "Corcoran Machine Company", + "address": "135 E Liberty St", + "city": "Wooster", + "country": "Wayne", + "state": "OH", + "zip": "44691", + "phone": "330-262-5481", + "fax": "330-262-7555", + "email": "burton@brining.com", + "web": "http://www.burtonbrining.com", + "followers": 8158 + }, + { + "firstname": "Rosalie", + "lastname": "Krigger", + "company": "Aaron, William Esq", + "address": "330 Route 211 E", + "city": "Middletown", + "country": "Orange", + "state": "NY", + "zip": "10940", + "phone": "845-343-2313", + "fax": "845-343-2979", + "email": "rosalie@krigger.com", + "web": "http://www.rosaliekrigger.com", + "followers": 1411 + }, + { + "firstname": "Tammie", + "lastname": "Schwartzwalde", + "company": "Cox, Thomas E", + "address": "415 Center St", + "city": "Ironton", + "country": "Lawrence", + "state": "OH", + "zip": "45638", + "phone": "740-532-5488", + "fax": "740-532-0319", + "email": "tammie@schwartzwalde.com", + "web": "http://www.tammieschwartzwalde.com", + "followers": 1367 + }, + { + "firstname": "Darrin", + "lastname": "Neiss", + "company": "Delaney, James J Jr", + "address": "101 W Central Blvd", + "city": "Kewanee", + "country": "Henry", + "state": "IL", + "zip": "61443", + "phone": "309-852-5127", + "fax": "309-852-8638", + "email": "darrin@neiss.com", + "web": "http://www.darrinneiss.com", + "followers": 5748 + }, + { + "firstname": "Rosalia", + "lastname": "Kennemur", + "company": "Reagan, Thomas J Esq", + "address": "222 S 10th St", + "city": "Oakdale", + "country": "Allen", + "state": "LA", + "zip": "71463", + "phone": "318-335-5586", + "fax": "318-335-1873", + "email": "rosalia@kennemur.com", + "web": "http://www.rosaliakennemur.com", + "followers": 5984 + }, + { + "firstname": "Callie", + "lastname": "Leboeuf", + "company": "Town Motors", + "address": "100 S 2nd Ave", + "city": "Alpena", + "country": "Alpena", + "state": "MI", + "zip": "49707", + "phone": "989-354-3344", + "fax": "989-354-3712", + "email": "callie@leboeuf.com", + "web": "http://www.callieleboeuf.com", + "followers": 3607 + }, + { + "firstname": "Patty", + "lastname": "Bernasconi", + "company": "Porter Wright Morris & Arthur", + "address": "851 Fort Street Mall", + "city": "Honolulu", + "country": "Honolulu", + "state": "HI", + "zip": "96813", + "phone": "808-531-2621", + "fax": "808-531-6234", + "email": "patty@bernasconi.com", + "web": "http://www.pattybernasconi.com", + "followers": 3012 + }, + { + "firstname": "Elmo", + "lastname": "Gabouer", + "company": "Conduit & Foundation Corp", + "address": "275 W Bridge St", + "city": "New Hope", + "country": "Bucks", + "state": "PA", + "zip": "18938", + "phone": "215-862-6538", + "fax": "215-862-7006", + "email": "elmo@gabouer.com", + "web": "http://www.elmogabouer.com", + "followers": 9593 + }, + { + "firstname": "Logan", + "lastname": "Muhl", + "company": "Brown, Phillip C Esq", + "address": "126 S Bellevue Ave", + "city": "Langhorne", + "country": "Bucks", + "state": "PA", + "zip": "19047", + "phone": "215-757-6124", + "fax": "215-757-2785", + "email": "logan@muhl.com", + "web": "http://www.loganmuhl.com", + "followers": 741 + }, + { + "firstname": "Vivian", + "lastname": "Brzostowski", + "company": "Savage, Philip M Iii", + "address": "118 Mill St", + "city": "Bristol", + "country": "Bucks", + "state": "PA", + "zip": "19007", + "phone": "215-788-2791", + "fax": "215-788-3902", + "email": "vivian@brzostowski.com", + "web": "http://www.vivianbrzostowski.com", + "followers": 1121 + }, + { + "firstname": "Efren", + "lastname": "Baucher", + "company": "R O Binson Inc", + "address": "Rts 232 & 413", + "city": "Newtown", + "country": "Bucks", + "state": "PA", + "zip": "18940", + "phone": "215-598-4644", + "fax": "215-598-5929", + "email": "efren@baucher.com", + "web": "http://www.efrenbaucher.com", + "followers": 8199 + }, + { + "firstname": "Kurtis", + "lastname": "Mcbay", + "company": "P C Enterprises Ltd", + "address": "737 Levittown Ctr", + "city": "Levittown", + "country": "Bucks", + "state": "PA", + "zip": "19055", + "phone": "215-946-6048", + "fax": "215-946-6458", + "email": "kurtis@mcbay.com", + "web": "http://www.kurtismcbay.com", + "followers": 8315 + }, + { + "firstname": "Guillermo", + "lastname": "Tsang", + "company": "Gillis, Donald W Esq", + "address": "16 Highland Park Way", + "city": "Levittown", + "country": "Bucks", + "state": "PA", + "zip": "19056", + "phone": "215-949-7912", + "fax": "215-949-8919", + "email": "guillermo@tsang.com", + "web": "http://www.guillermotsang.com", + "followers": 4007 + }, + { + "firstname": "Milton", + "lastname": "Kuhlman", + "company": "Imag Corp", + "address": "237 Jackson St Sw", + "city": "Camden", + "country": "Ouachita", + "state": "AR", + "zip": "71701", + "phone": "870-836-9021", + "fax": "870-836-2283", + "email": "milton@kuhlman.com", + "web": "http://www.miltonkuhlman.com", + "followers": 7034 + }, + { + "firstname": "Naomi", + "lastname": "Greenly", + "company": "Kpmg Peat Marwick Llp", + "address": "1400 Gault Ave N", + "city": "Fort Payne", + "country": "De Kalb", + "state": "AL", + "zip": "35967", + "phone": "256-845-1216", + "fax": "256-845-2469", + "email": "naomi@greenly.com", + "web": "http://www.naomigreenly.com", + "followers": 916 + }, + { + "firstname": "Mary", + "lastname": "Maurizio", + "company": "Carey Filter White & Boland", + "address": "404 Main St", + "city": "Delta", + "country": "Fulton", + "state": "OH", + "zip": "43515", + "phone": "419-822-7176", + "fax": "419-822-0591", + "email": "mary@maurizio.com", + "web": "http://www.marymaurizio.com", + "followers": 6083 + }, + { + "firstname": "Caitlin", + "lastname": "Reiniger", + "company": "White, Lawrence R Esq", + "address": "140 N Columbus St", + "city": "Galion", + "country": "Crawford", + "state": "OH", + "zip": "44833", + "phone": "419-468-6910", + "fax": "419-468-9018", + "email": "caitlin@reiniger.com", + "web": "http://www.caitlinreiniger.com", + "followers": 641 + }, + { + "firstname": "Coleman", + "lastname": "Cuneo", + "company": "M & M Mars", + "address": "25 E High St", + "city": "Waynesburg", + "country": "Greene", + "state": "PA", + "zip": "15370", + "phone": "724-627-4378", + "fax": "724-627-2305", + "email": "coleman@cuneo.com", + "web": "http://www.colemancuneo.com", + "followers": 8657 + }, + { + "firstname": "Rachel", + "lastname": "Larrison", + "company": "Ipa The Editing House", + "address": "3721 Oberlin Ave", + "city": "Lorain", + "country": "Lorain", + "state": "OH", + "zip": "44053", + "phone": "440-282-3729", + "fax": "440-282-6918", + "email": "rachel@larrison.com", + "web": "http://www.rachellarrison.com", + "followers": 4562 + }, + { + "firstname": "Dwayne", + "lastname": "Maddalena", + "company": "Ebbeson, James O Esq", + "address": "532 Court St", + "city": "Pekin", + "country": "Tazewell", + "state": "IL", + "zip": "61554", + "phone": "309-347-1137", + "fax": "309-347-9282", + "email": "dwayne@maddalena.com", + "web": "http://www.dwaynemaddalena.com", + "followers": 7384 + }, + { + "firstname": "Angelique", + "lastname": "Schermerhorn", + "company": "Safety Direct Inc", + "address": "511 Saint Johns Ave", + "city": "Palatka", + "country": "Putnam", + "state": "FL", + "zip": "32177", + "phone": "386-328-7869", + "fax": "386-328-1499", + "email": "angelique@schermerhorn.com", + "web": "http://www.angeliqueschermerhorn.com", + "followers": 6181 + }, + { + "firstname": "Junior", + "lastname": "Wadlinger", + "company": "Sonos Music", + "address": "185 E Market St", + "city": "Warren", + "country": "Trumbull", + "state": "OH", + "zip": "44481", + "phone": "330-393-9794", + "fax": "330-393-6808", + "email": "junior@wadlinger.com", + "web": "http://www.juniorwadlinger.com", + "followers": 7690 + }, + { + "firstname": "Darrel", + "lastname": "Tork", + "company": "S & T Machining", + "address": "2121 S Mannheim Rd", + "city": "Westchester", + "country": "Cook", + "state": "IL", + "zip": "60154", + "phone": "708-865-8091", + "fax": "708-865-8984", + "email": "darrel@tork.com", + "web": "http://www.darreltork.com", + "followers": 9708 + }, + { + "firstname": "Lana", + "lastname": "Garrigus", + "company": "Russell Builders & Hardware", + "address": "118 Ne 3rd St", + "city": "McMinnville", + "country": "Yamhill", + "state": "OR", + "zip": "97128", + "phone": "503-434-2642", + "fax": "503-434-8121", + "email": "lana@garrigus.com", + "web": "http://www.lanagarrigus.com", + "followers": 3048 + }, + { + "firstname": "Jonathon", + "lastname": "Waldall", + "company": "Mission Hills Escrow", + "address": "300 Hampton St", + "city": "Walterboro", + "country": "Colleton", + "state": "SC", + "zip": "29488", + "phone": "843-549-9461", + "fax": "843-549-0125", + "email": "jonathon@waldall.com", + "web": "http://www.jonathonwaldall.com", + "followers": 8039 + }, + { + "firstname": "Kristine", + "lastname": "Paker", + "company": "Chagrin Valley Massotherapy", + "address": "301 N Pine St", + "city": "Creston", + "country": "Union", + "state": "IA", + "zip": "50801", + "phone": "641-782-7169", + "fax": "641-782-7962", + "email": "kristine@paker.com", + "web": "http://www.kristinepaker.com", + "followers": 7977 + }, + { + "firstname": "Dwain", + "lastname": "Agricola", + "company": "Beatty Satchell Everngam & Co", + "address": "211 N Main St", + "city": "Leitchfield", + "country": "Grayson", + "state": "KY", + "zip": "42754", + "phone": "270-259-5194", + "fax": "270-259-0821", + "email": "dwain@agricola.com", + "web": "http://www.dwainagricola.com", + "followers": 8410 + }, + { + "firstname": "Jewel", + "lastname": "Agresta", + "company": "Md Assn Cert Pub Accts Inc", + "address": "4565 Harrison St", + "city": "Hillside", + "country": "Cook", + "state": "IL", + "zip": "60162", + "phone": "708-449-7139", + "fax": "708-449-2963", + "email": "jewel@agresta.com", + "web": "http://www.jewelagresta.com", + "followers": 293 + }, + { + "firstname": "Georgette", + "lastname": "Bandyk", + "company": "Specialty Alumn Castings Inc", + "address": "1965 Wakefield Ave", + "city": "Petersburg", + "country": "Petersburg City", + "state": "VA", + "zip": "23805", + "phone": "804-796-2746", + "fax": "804-796-5351", + "email": "georgette@bandyk.com", + "web": "http://www.georgettebandyk.com", + "followers": 9865 + }, + { + "firstname": "Geri", + "lastname": "Forness", + "company": "Quality Dynamics Group", + "address": "Capitol Ave", + "city": "Corydon", + "country": "Harrison", + "state": "IN", + "zip": "47112", + "phone": "812-738-9416", + "fax": "812-738-4816", + "email": "geri@forness.com", + "web": "http://www.geriforness.com", + "followers": 7788 + }, + { + "firstname": "Modesto", + "lastname": "Scroggie", + "company": "Bulloch, Bruce Cpa", + "address": "300 Orlando Dr", + "city": "Raritan", + "country": "Somerset", + "state": "NJ", + "zip": "08869", + "phone": "908-980-5621", + "fax": "908-980-9842", + "email": "modesto@scroggie.com", + "web": "http://www.modestoscroggie.com", + "followers": 5671 + }, + { + "firstname": "Curt", + "lastname": "Menedez", + "company": "J & J Machinery Repair Inc", + "address": "207 Yukon", + "city": "Tampa", + "country": "Hillsborough", + "state": "FL", + "zip": "33604", + "phone": "813-932-8602", + "fax": "813-932-4548", + "email": "curt@menedez.com", + "web": "http://www.curtmenedez.com", + "followers": 1311 + }, + { + "firstname": "Karen", + "lastname": "Zombo", + "company": "Healthcare Family Credit Union", + "address": "3112 W Kennedy Blvd", + "city": "Tampa", + "country": "Hillsborough", + "state": "FL", + "zip": "33609", + "phone": "813-872-4288", + "fax": "813-872-8262", + "email": "karen@zombo.com", + "web": "http://www.karenzombo.com", + "followers": 2543 + }, + { + "firstname": "Lora", + "lastname": "Lendor", + "company": "Advanced Electromagnetics Inc", + "address": "7 W Darlington Ave", + "city": "Kissimmee", + "country": "Osceola", + "state": "FL", + "zip": "34741", + "phone": "407-870-0382", + "fax": "407-870-6229", + "email": "lora@lendor.com", + "web": "http://www.loralendor.com", + "followers": 5947 + }, + { + "firstname": "Felipe", + "lastname": "Mahone", + "company": "Apartment Mart", + "address": "1001 Bishop St #-2850", + "city": "Honolulu", + "country": "Honolulu", + "state": "HI", + "zip": "96813", + "phone": "808-536-3239", + "fax": "808-536-1231", + "email": "felipe@mahone.com", + "web": "http://www.felipemahone.com", + "followers": 4427 + }, + { + "firstname": "Rosalyn", + "lastname": "Daulton", + "company": "Rodgard Corp", + "address": "300 Broadacres Dr", + "city": "Bloomfield", + "country": "Essex", + "state": "NJ", + "zip": "07003", + "phone": "973-338-8552", + "fax": "973-338-1603", + "email": "rosalyn@daulton.com", + "web": "http://www.rosalyndaulton.com", + "followers": 2667 + }, + { + "firstname": "Marquita", + "lastname": "Bousman", + "company": "Constantine, Katherine A Esq", + "address": "30 Highland Ave", + "city": "Warwick", + "country": "Orange", + "state": "NY", + "zip": "10990", + "phone": "845-986-0909", + "fax": "845-986-2447", + "email": "marquita@bousman.com", + "web": "http://www.marquitabousman.com", + "followers": 4315 + }, + { + "firstname": "Carla", + "lastname": "Sirbaugh", + "company": "Urso, Natale L Esq", + "address": "110 S La Brea Ave #-22", + "city": "Inglewood", + "country": "Los Angeles", + "state": "CA", + "zip": "90301", + "phone": "310-412-6653", + "fax": "310-412-1067", + "email": "carla@sirbaugh.com", + "web": "http://www.carlasirbaugh.com", + "followers": 9701 + }, + { + "firstname": "Wes", + "lastname": "Fontanella", + "company": "Woodside Travel Trust", + "address": "1369 W Redondo Beach Blvd", + "city": "Gardena", + "country": "Los Angeles", + "state": "CA", + "zip": "90247", + "phone": "310-515-3065", + "fax": "310-515-2515", + "email": "wes@fontanella.com", + "web": "http://www.wesfontanella.com", + "followers": 1717 + }, + { + "firstname": "Meredith", + "lastname": "Ivrin", + "company": "Hamilton Financial Corp", + "address": "323 N Gilbert St", + "city": "Danville", + "country": "Vermilion", + "state": "IL", + "zip": "61832", + "phone": "217-446-7172", + "fax": "217-446-2369", + "email": "meredith@ivrin.com", + "web": "http://www.meredithivrin.com", + "followers": 7827 + }, + { + "firstname": "Laurie", + "lastname": "Bigg", + "company": "Essc Inc", + "address": "14500 Lakeside Cir", + "city": "Sterling Heights", + "country": "Macomb", + "state": "MI", + "zip": "48313", + "phone": "586-247-6171", + "fax": "586-247-9791", + "email": "laurie@bigg.com", + "web": "http://www.lauriebigg.com", + "followers": 8684 + }, + { + "firstname": "Barton", + "lastname": "Friesner", + "company": "Optical Supply", + "address": "1 Summit Ct", + "city": "Fishkill", + "country": "Dutchess", + "state": "NY", + "zip": "12524", + "phone": "845-896-6652", + "fax": "845-896-1692", + "email": "barton@friesner.com", + "web": "http://www.bartonfriesner.com", + "followers": 4889 + }, + { + "firstname": "Sophie", + "lastname": "Langner", + "company": "Kapetanakis, Alexander Esq", + "address": "535 Ward Ave #-204", + "city": "Honolulu", + "country": "Honolulu", + "state": "HI", + "zip": "96814", + "phone": "808-545-7695", + "fax": "808-545-8636", + "email": "sophie@langner.com", + "web": "http://www.sophielangner.com", + "followers": 1596 + }, + { + "firstname": "Garfield", + "lastname": "Lijewski", + "company": "Denker, Aaron Esq", + "address": "6401 N Lincoln Ave", + "city": "Chicago", + "country": "Cook", + "state": "IL", + "zip": "60645", + "phone": "773-976-3827", + "fax": "773-976-5586", + "email": "garfield@lijewski.com", + "web": "http://www.garfieldlijewski.com", + "followers": 5955 + }, + { + "firstname": "Warren", + "lastname": "Speach", + "company": "E Norwalk Crmc Tile & Mrbl Co", + "address": "361 Park Ave", + "city": "Scotch Plains", + "country": "Union", + "state": "NJ", + "zip": "07076", + "phone": "908-322-3846", + "fax": "908-322-6744", + "email": "warren@speach.com", + "web": "http://www.warrenspeach.com", + "followers": 6741 + }, + { + "firstname": "Madonna", + "lastname": "Cosby", + "company": "Emanuel Reider Architects Inc", + "address": "135 Main St", + "city": "San Francisco", + "country": "San Francisco", + "state": "CA", + "zip": "94105", + "phone": "415-956-4437", + "fax": "415-956-5134", + "email": "madonna@cosby.com", + "web": "http://www.madonnacosby.com", + "followers": 3985 + }, + { + "firstname": "Valeria", + "lastname": "Lingbeek", + "company": "Recreation Director", + "address": "state", + "city": "Newtown", + "country": "Bucks", + "state": "PA", + "zip": "18940", + "phone": "215-968-8421", + "fax": "215-968-1567", + "email": "valeria@lingbeek.com", + "web": "http://www.valerialingbeek.com", + "followers": 8824 + }, + { + "firstname": "Heath", + "lastname": "Vanalphen", + "company": "California Stat Min & Mnrl Mus", + "address": "227 Commercial St", + "city": "Provincetown", + "country": "Barnstable", + "state": "MA", + "zip": "02657", + "phone": "508-487-6010", + "fax": "508-487-0597", + "email": "heath@vanalphen.com", + "web": "http://www.heathvanalphen.com", + "followers": 6846 + }, + { + "firstname": "Marisa", + "lastname": "Woldridge", + "company": "Wegner, Tim Esq", + "address": "153 Baltimore St", + "city": "Cumberland", + "country": "Allegany", + "state": "MD", + "zip": "21502", + "phone": "301-759-7421", + "fax": "301-759-9676", + "email": "marisa@woldridge.com", + "web": "http://www.marisawoldridge.com", + "followers": 6009 + }, + { + "firstname": "Rene", + "lastname": "Dummermuth", + "company": "Super 8 Motel", + "address": "2 Ridgedale Ave", + "city": "Cedar Knolls", + "country": "Morris", + "state": "NJ", + "zip": "07927", + "phone": "973-292-7918", + "fax": "973-292-5898", + "email": "rene@dummermuth.com", + "web": "http://www.renedummermuth.com", + "followers": 1687 + }, + { + "firstname": "Helga", + "lastname": "Windle", + "company": "Loew, Andrea H Esq", + "address": "99185 Moanalua Rd #-101", + "city": "Aiea", + "country": "Honolulu", + "state": "HI", + "zip": "96701", + "phone": "808-487-7779", + "fax": "808-487-6258", + "email": "helga@windle.com", + "web": "http://www.helgawindle.com", + "followers": 56 + }, + { + "firstname": "Margot", + "lastname": "Arenburg", + "company": "Mcivor, Carolyn Md", + "address": "736 N Mills Ave", + "city": "Orlando", + "country": "Orange", + "state": "FL", + "zip": "32803", + "phone": "407-896-1593", + "fax": "407-896-6679", + "email": "margot@arenburg.com", + "web": "http://www.margotarenburg.com", + "followers": 7445 + }, + { + "firstname": "Sheila", + "lastname": "Holloran", + "company": "Warehouse On Wheels", + "address": "126 S Main St", + "city": "Clyde", + "country": "Sandusky", + "state": "OH", + "zip": "43410", + "phone": "419-547-9428", + "fax": "419-547-4835", + "email": "sheila@holloran.com", + "web": "http://www.sheilaholloran.com", + "followers": 9682 + }, + { + "firstname": "Melinda", + "lastname": "Carleton", + "company": "Cenol Co", + "address": "395 Revilo Ave", + "city": "Shirley", + "country": "Suffolk", + "state": "NY", + "zip": "11967", + "phone": "631-399-1636", + "fax": "631-399-6025", + "email": "melinda@carleton.com", + "web": "http://www.melindacarleton.com", + "followers": 7154 + }, + { + "firstname": "Ike", + "lastname": "Zeolla", + "company": "Halpin, Irene A Esq", + "address": "1900 L St Nw", + "city": "Washington", + "country": "District of Columbia", + "state": "DC", + "zip": "20036", + "phone": "202-331-1409", + "fax": "202-331-7781", + "email": "ike@zeolla.com", + "web": "http://www.ikezeolla.com", + "followers": 7418 + }, + { + "firstname": "Elmo", + "lastname": "Dagenais", + "company": "P C Routing Inc", + "address": "12914 Old Stage Rd", + "city": "Chester", + "country": "Chesterfield", + "state": "VA", + "zip": "23831", + "phone": "804-796-5647", + "fax": "804-796-9493", + "email": "elmo@dagenais.com", + "web": "http://www.elmodagenais.com", + "followers": 7355 + }, + { + "firstname": "Valentine", + "lastname": "Granberry", + "company": "Sunnyvale Travel", + "address": "1019 Shadick Dr", + "city": "Orange City", + "country": "Volusia", + "state": "FL", + "zip": "32763", + "phone": "407-775-4269", + "fax": "407-775-0598", + "email": "valentine@granberry.com", + "web": "http://www.valentinegranberry.com", + "followers": 7021 + }, + { + "firstname": "Waldo", + "lastname": "Sisk", + "company": "Muller Drugs Inc", + "address": "2211 Us Highway 19", + "city": "Holiday", + "country": "Pasco", + "state": "FL", + "zip": "34691", + "phone": "727-934-3827", + "fax": "727-934-7181", + "email": "waldo@sisk.com", + "web": "http://www.waldosisk.com", + "followers": 2109 + }, + { + "firstname": "Robt", + "lastname": "Braithwaite", + "company": "Meyer, Janet Md", + "address": "320 W Mclane St", + "city": "Osceola", + "country": "Clarke", + "state": "IA", + "zip": "50213", + "phone": "641-342-1276", + "fax": "641-342-6031", + "email": "robt@braithwaite.com", + "web": "http://www.robtbraithwaite.com", + "followers": 1336 + }, + { + "firstname": "Corinne", + "lastname": "Cowan", + "company": "Ward Equipment Co", + "address": "20 Montana Ave", + "city": "Laurel", + "country": "Yellowstone", + "state": "MT", + "zip": "59044", + "phone": "406-628-4030", + "fax": "406-628-9418", + "email": "corinne@cowan.com", + "web": "http://www.corinnecowan.com", + "followers": 7049 + }, + { + "firstname": "Rebeca", + "lastname": "Brumet", + "company": "Kingston Office Supplies Inc", + "address": "936 N Western Ave", + "city": "Chicago", + "country": "Cook", + "state": "IL", + "zip": "60622", + "phone": "773-772-4015", + "fax": "773-772-1603", + "email": "rebeca@brumet.com", + "web": "http://www.rebecabrumet.com", + "followers": 202 + }, + { + "firstname": "Lynn", + "lastname": "Saulsberry", + "company": "Printing Factory Inc", + "address": "2725 W Mcdowell Rd", + "city": "Phoenix", + "country": "Maricopa", + "state": "AZ", + "zip": "85009", + "phone": "602-272-8326", + "fax": "602-272-3143", + "email": "lynn@saulsberry.com", + "web": "http://www.lynnsaulsberry.com", + "followers": 5265 + }, + { + "firstname": "Hannah", + "lastname": "Facio", + "company": "Cmptr Pros For Scl", + "address": "115 E Church St", + "city": "Elberton", + "country": "Elbert", + "state": "GA", + "zip": "30635", + "phone": "706-283-8280", + "fax": "706-283-6916", + "email": "hannah@facio.com", + "web": "http://www.hannahfacio.com", + "followers": 4321 + }, + { + "firstname": "Benjamin", + "lastname": "Schkade", + "company": "Port Brownsville Pub Scale Inc", + "address": "1636 E 1st Ave", + "city": "Anchorage", + "country": "Anchorage", + "state": "AK", + "zip": "99501", + "phone": "907-278-8687", + "fax": "907-278-7166", + "email": "benjamin@schkade.com", + "web": "http://www.benjaminschkade.com", + "followers": 5846 + }, + { + "firstname": "Athena", + "lastname": "Fontanilla", + "company": "Willamette Hobbies", + "address": "5020 Germantown Ave", + "city": "Philadelphia", + "country": "Philadelphia", + "state": "PA", + "zip": "19144", + "phone": "215-438-9675", + "fax": "215-438-1716", + "email": "athena@fontanilla.com", + "web": "http://www.athenafontanilla.com", + "followers": 5342 + }, + { + "firstname": "Alene", + "lastname": "Rabeck", + "company": "Bucks country Of", + "address": "475 E 162nd St", + "city": "South Holland", + "country": "Cook", + "state": "IL", + "zip": "60473", + "phone": "708-333-8056", + "fax": "708-333-2125", + "email": "alene@rabeck.com", + "web": "http://www.alenerabeck.com", + "followers": 2815 + }, + { + "firstname": "Yvette", + "lastname": "Kokoska", + "company": "Automation Products Inc", + "address": "200 Valley Dr", + "city": "Brisbane", + "country": "San Mateo", + "state": "CA", + "zip": "94005", + "phone": "650-468-3592", + "fax": "650-468-7716", + "email": "yvette@kokoska.com", + "web": "http://www.yvettekokoska.com", + "followers": 6175 + }, + { + "firstname": "Petra", + "lastname": "Clemmens", + "company": "Belton Industries Inc", + "address": "980 N Federal Hwy", + "city": "Boca Raton", + "country": "Palm Beach", + "state": "FL", + "zip": "33432", + "phone": "561-394-2152", + "fax": "561-394-1574", + "email": "petra@clemmens.com", + "web": "http://www.petraclemmens.com", + "followers": 5263 + }, + { + "firstname": "Carmel", + "lastname": "Overfelt", + "company": "Woodworkers Supply Inc", + "address": "6801 Lake Worth Rd", + "city": "Lake Worth", + "country": "Palm Beach", + "state": "FL", + "zip": "33467", + "phone": "561-965-5167", + "fax": "561-965-1433", + "email": "carmel@overfelt.com", + "web": "http://www.carmeloverfelt.com", + "followers": 5868 + }, + { + "firstname": "Danette", + "lastname": "Fostervold", + "company": "Flach, Douglas Esq", + "address": "6920 Santa Teresa Blvd", + "city": "San Jose", + "country": "Santa Clara", + "state": "CA", + "zip": "95119", + "phone": "408-225-1319", + "fax": "408-225-5205", + "email": "danette@fostervold.com", + "web": "http://www.danettefostervold.com", + "followers": 1315 + }, + { + "firstname": "Vince", + "lastname": "Ettel", + "company": "Breen Trucking", + "address": "408 Main St", + "city": "Springfield", + "country": "Sarpy", + "state": "NE", + "zip": "68059", + "phone": "402-399-6999", + "fax": "402-399-6478", + "email": "vince@ettel.com", + "web": "http://www.vinceettel.com", + "followers": 7780 + }, + { + "firstname": "Davis", + "lastname": "Heideman", + "company": "Dennis J Wall Atty At Law Pa", + "address": "801 W 5th St", + "city": "Fort Worth", + "country": "Tarrant", + "state": "TX", + "zip": "76102", + "phone": "817-332-7902", + "fax": "817-332-5439", + "email": "davis@heideman.com", + "web": "http://www.davisheideman.com", + "followers": 4778 + }, + { + "firstname": "Bradly", + "lastname": "Hasselvander", + "company": "Public Works Department Office", + "address": "2302 Artesia Blvd", + "city": "Redondo Beach", + "country": "Los Angeles", + "state": "CA", + "zip": "90278", + "phone": "310-374-2374", + "fax": "310-374-2363", + "email": "bradly@hasselvander.com", + "web": "http://www.bradlyhasselvander.com", + "followers": 7831 + }, + { + "firstname": "Nathanial", + "lastname": "Phoenix", + "company": "Precision Steel Rule Die Co", + "address": "1000 Nw 105th St", + "city": "Oklahoma City", + "country": "Oklahoma", + "state": "OK", + "zip": "73114", + "phone": "405-748-7637", + "fax": "405-748-1856", + "email": "nathanial@phoenix.com", + "web": "http://www.nathanialphoenix.com", + "followers": 8308 + }, + { + "firstname": "Lamar", + "lastname": "Mckibben", + "company": "Battaglia, Jack M Esq", + "address": "1620 Folsom St", + "city": "San Francisco", + "country": "San Francisco", + "state": "CA", + "zip": "94103", + "phone": "415-864-7338", + "fax": "415-864-7623", + "email": "lamar@mckibben.com", + "web": "http://www.lamarmckibben.com", + "followers": 4193 + }, + { + "firstname": "Shanna", + "lastname": "Numkena", + "company": "Anderson Independent Mail", + "address": "1426 5th Pl Nw", + "city": "Rochester", + "country": "Olmsted", + "state": "MN", + "zip": "55901", + "phone": "507-280-1856", + "fax": "507-280-6844", + "email": "shanna@numkena.com", + "web": "http://www.shannanumkena.com", + "followers": 1364 + }, + { + "firstname": "Helena", + "lastname": "Suermann", + "company": "Stubenberge, James A Esq", + "address": "897 Independence Ave", + "city": "Mountain View", + "country": "Santa Clara", + "state": "CA", + "zip": "94043", + "phone": "650-965-0255", + "fax": "650-965-3368", + "email": "helena@suermann.com", + "web": "http://www.helenasuermann.com", + "followers": 4536 + }, + { + "firstname": "Delphine", + "lastname": "Helmich", + "company": "Friends Hospital", + "address": "50 Aviation Way", + "city": "Watsonville", + "country": "Santa Cruz", + "state": "CA", + "zip": "95076", + "phone": "831-763-4348", + "fax": "831-763-0923", + "email": "delphine@helmich.com", + "web": "http://www.delphinehelmich.com", + "followers": 7383 + }, + { + "firstname": "Barbara", + "lastname": "Hindley", + "company": "Kirin Amgen", + "address": "904 N Lake St", + "city": "Burbank", + "country": "Los Angeles", + "state": "CA", + "zip": "91502", + "phone": "818-841-8886", + "fax": "818-841-8221", + "email": "barbara@hindley.com", + "web": "http://www.barbarahindley.com", + "followers": 9155 + }, + { + "firstname": "Sheryl", + "lastname": "Sisofo", + "company": "Thrifty Sign Stop", + "address": "1049 S Mccord Rd", + "city": "Holland", + "country": "Lucas", + "state": "OH", + "zip": "43528", + "phone": "419-865-8702", + "fax": "419-865-1836", + "email": "sheryl@sisofo.com", + "web": "http://www.sherylsisofo.com", + "followers": 5693 + }, + { + "firstname": "Robyn", + "lastname": "Christophel", + "company": "Woodward, John C Esq", + "address": "3420 E Flamingo Rd", + "city": "Las Vegas", + "country": "Clark", + "state": "NV", + "zip": "89121", + "phone": "702-458-1072", + "fax": "702-458-2093", + "email": "robyn@christophel.com", + "web": "http://www.robynchristophel.com", + "followers": 3971 + }, + { + "firstname": "Gayla", + "lastname": "Geimer", + "company": "Ortman Mccain Co", + "address": "1280 Price Ave", + "city": "Pomona", + "country": "Los Angeles", + "state": "CA", + "zip": "91767", + "phone": "909-620-6453", + "fax": "909-620-2768", + "email": "gayla@geimer.com", + "web": "http://www.gaylageimer.com", + "followers": 8969 + }, + { + "firstname": "Evan", + "lastname": "Pyfrom", + "company": "Nevada Baking Co", + "address": "5430 Alpha Rd", + "city": "Dallas", + "country": "Dallas", + "state": "TX", + "zip": "75240", + "phone": "214-661-4625", + "fax": "214-661-8804", + "email": "evan@pyfrom.com", + "web": "http://www.evanpyfrom.com", + "followers": 2516 + }, + { + "firstname": "Chad", + "lastname": "Miklas", + "company": "Red Carpet Inn", + "address": "31 S Grove St", + "city": "East Aurora", + "country": "Erie", + "state": "NY", + "zip": "14052", + "phone": "716-655-2736", + "fax": "716-655-2749", + "email": "chad@miklas.com", + "web": "http://www.chadmiklas.com", + "followers": 5357 + }, + { + "firstname": "Trey", + "lastname": "Tout", + "company": "Breen, Sean E Esq", + "address": "100 Mbc Dr", + "city": "Shawano", + "country": "Shawano", + "state": "WI", + "zip": "54166", + "phone": "715-526-6806", + "fax": "715-526-2421", + "email": "trey@tout.com", + "web": "http://www.treytout.com", + "followers": 205 + }, + { + "firstname": "Isabell", + "lastname": "Armout", + "company": "True Electric Corp", + "address": "7895 S Cessna Ave", + "city": "Gaithersburg", + "country": "Montgomery", + "state": "MD", + "zip": "20879", + "phone": "301-921-0406", + "fax": "301-921-1251", + "email": "isabell@armout.com", + "web": "http://www.isabellarmout.com", + "followers": 4878 + }, + { + "firstname": "Alejandro", + "lastname": "Mascall", + "company": "Railway Educational Bureau", + "address": "2350 Duke St", + "city": "Alexandria", + "country": "Alexandria City", + "state": "VA", + "zip": "22314", + "phone": "703-684-2882", + "fax": "703-684-8561", + "email": "alejandro@mascall.com", + "web": "http://www.alejandromascall.com", + "followers": 3512 + }, + { + "firstname": "Kennith", + "lastname": "Kirklin", + "company": "Sears Roebuck And Co", + "address": "2303 21st Ave S", + "city": "Nashville", + "country": "Davidson", + "state": "TN", + "zip": "37212", + "phone": "615-385-1598", + "fax": "615-385-6946", + "email": "kennith@kirklin.com", + "web": "http://www.kennithkirklin.com", + "followers": 5087 + }, + { + "firstname": "Ike", + "lastname": "Benthin", + "company": "Lee, Harry Esq", + "address": "1062 Folsom St", + "city": "San Francisco", + "country": "San Francisco", + "state": "CA", + "zip": "94103", + "phone": "415-255-5277", + "fax": "415-255-6543", + "email": "ike@benthin.com", + "web": "http://www.ikebenthin.com", + "followers": 8473 + }, + { + "firstname": "Donald", + "lastname": "Sherretts", + "company": "Nylonge Corporation", + "address": "1062 Folsom St", + "city": "San Francisco", + "country": "San Francisco", + "state": "CA", + "zip": "94103", + "phone": "415-255-7718", + "fax": "415-255-7088", + "email": "donald@sherretts.com", + "web": "http://www.donaldsherretts.com", + "followers": 2332 + }, + { + "firstname": "Lina", + "lastname": "Hybarger", + "company": "L & H Central Office", + "address": "1828 Jefferson Pl Nw", + "city": "Washington", + "country": "District of Columbia", + "state": "DC", + "zip": "20036", + "phone": "202-833-4983", + "fax": "202-833-3174", + "email": "lina@hybarger.com", + "web": "http://www.linahybarger.com", + "followers": 9793 + }, + { + "firstname": "Rebekah", + "lastname": "Padley", + "company": "Reed Engineering Inc", + "address": "200 E Delawr Pl", + "city": "Chicago", + "country": "Cook", + "state": "IL", + "zip": "60611", + "phone": "312-944-1877", + "fax": "312-944-1477", + "email": "rebekah@padley.com", + "web": "http://www.rebekahpadley.com", + "followers": 3839 + }, + { + "firstname": "Marion", + "lastname": "Gaulden", + "company": "Madden, John H Jr", + "address": "200 W South St", + "city": "Charlottesville", + "country": "Charlottesville City", + "state": "VA", + "zip": "22902", + "phone": "434-979-9335", + "fax": "434-979-2694", + "email": "marion@gaulden.com", + "web": "http://www.mariongaulden.com", + "followers": 5625 + }, + { + "firstname": "Maurine", + "lastname": "Monroy", + "company": "Central Distribution System", + "address": "2000 Linwood Ave", + "city": "Fort Lee", + "country": "Bergen", + "state": "NJ", + "zip": "07024", + "phone": "201-947-8922", + "fax": "201-947-4235", + "email": "maurine@monroy.com", + "web": "http://www.maurinemonroy.com", + "followers": 5828 + }, + { + "firstname": "Rosanna", + "lastname": "Sandrock", + "company": "Computer X Consulting", + "address": "1797 Lakewood Ter Se", + "city": "Atlanta", + "country": "Fulton", + "state": "GA", + "zip": "30315", + "phone": "404-627-4604", + "fax": "404-627-4276", + "email": "rosanna@sandrock.com", + "web": "http://www.rosannasandrock.com", + "followers": 3044 + }, + { + "firstname": "Marcelino", + "lastname": "Maggs", + "company": "Rascher & Betzold Inc", + "address": "201 E Pine St", + "city": "Orlando", + "country": "Orange", + "state": "FL", + "zip": "32801", + "phone": "407-420-1152", + "fax": "407-420-7195", + "email": "marcelino@maggs.com", + "web": "http://www.marcelinomaggs.com", + "followers": 5320 + }, + { + "firstname": "Florine", + "lastname": "Willardson", + "company": "Lunt, Donald C Esq", + "address": "5605 Ne 105th Ave", + "city": "Portland", + "country": "Multnomah", + "state": "OR", + "zip": "97220", + "phone": "503-256-6559", + "fax": "503-256-8982", + "email": "florine@willardson.com", + "web": "http://www.florinewillardson.com", + "followers": 2336 + }, + { + "firstname": "Jude", + "lastname": "Haza", + "company": "Howard Fabrication", + "address": "1348 Liberty Pike", + "city": "Franklin", + "country": "Williamson", + "state": "TN", + "zip": "37067", + "phone": "615-790-3984", + "fax": "615-790-3042", + "email": "jude@haza.com", + "web": "http://www.judehaza.com", + "followers": 7311 + }, + { + "firstname": "Eldon", + "lastname": "Sutch", + "company": "Friesen And Kane Public Accts", + "address": "1818 E Atlantic St", + "city": "Philadelphia", + "country": "Philadelphia", + "state": "PA", + "zip": "19134", + "phone": "215-743-2414", + "fax": "215-743-2529", + "email": "eldon@sutch.com", + "web": "http://www.eldonsutch.com", + "followers": 6895 + }, + { + "firstname": "Lashonda", + "lastname": "Enote", + "company": "Nichols Village The Inn", + "address": "6301 Owensmouth Ave", + "city": "Woodland Hills", + "country": "Los Angeles", + "state": "CA", + "zip": "91367", + "phone": "818-704-8490", + "fax": "818-704-7539", + "email": "lashonda@enote.com", + "web": "http://www.lashondaenote.com", + "Note": "Ancien Dailymotion, recontré à LeWeb London 2012", + "followers": 6383 + }, + { + "firstname": "Marla", + "lastname": "Folz", + "company": "Odonoghue C Kevin", + "address": "201 Electronics Blvd Sw", + "city": "Huntsville", + "country": "Madison", + "state": "AL", + "zip": "35824", + "phone": "256-464-3329", + "fax": "256-464-6964", + "email": "marla@folz.com", + "web": "http://www.marlafolz.com", + "Note": "Product Manager at Sage France & WebMaster of ConseilsMarketing.Fr Interview at LEWeb", + "followers": 5861 + }, + { + "firstname": "Reginald", + "lastname": "Lunan", + "company": "Healey Chevy Olds Buick Geo", + "address": "985 Parker Ct", + "city": "Santa Clara", + "country": "Santa Clara", + "state": "CA", + "zip": "95050", + "phone": "408-727-1747", + "fax": "408-727-0884", + "email": "reginald@lunan.com", + "web": "http://www.reginaldlunan.com", + "followers": 7075 + }, + { + "firstname": "Kyle", + "lastname": "Lindauer", + "company": "Gem Tec Inc", + "address": "2000 E Jefferson St", + "city": "Phoenix", + "country": "Maricopa", + "state": "AZ", + "zip": "85034", + "phone": "602-258-5196", + "fax": "602-258-8609", + "email": "kyle@lindauer.com", + "web": "http://www.kylelindauer.com", + "followers": 6277 + }, + { + "firstname": "Son", + "lastname": "Marschke", + "company": "Evenings Dlght Fireplaces", + "address": "1119 Wheeler Ave", + "city": "Scranton", + "country": "Lackawanna", + "state": "PA", + "zip": "18510", + "phone": "570-969-0886", + "fax": "570-969-8176", + "email": "son@marschke.com", + "web": "http://www.sonmarschke.com", + "followers": 3481 + }, + { + "firstname": "Johnie", + "lastname": "Minaai", + "company": "Darling, Pamela E", + "address": "2100 Linwood Ave", + "city": "Fort Lee", + "country": "Bergen", + "state": "NJ", + "zip": "07024", + "phone": "201-592-4771", + "fax": "201-592-8423", + "email": "johnie@minaai.com", + "web": "http://www.johnieminaai.com", + "followers": 5903 + }, + { + "firstname": "Kelli", + "lastname": "Varrato", + "company": "Frances Meyer Inc", + "address": "2505 Congress St", + "city": "San Diego", + "country": "San Diego", + "state": "CA", + "zip": "92110", + "phone": "858-298-3969", + "fax": "858-298-6695", + "email": "kelli@varrato.com", + "web": "http://www.kellivarrato.com", + "followers": 9891 + }, + { + "firstname": "Neva", + "lastname": "Marsell", + "company": "Comfort Inn Wilshire", + "address": "1312 W Lincoln Ave", + "city": "Olivia", + "country": "Renville", + "state": "MN", + "zip": "56277", + "phone": "320-523-4975", + "fax": "320-523-8378", + "email": "neva@marsell.com", + "web": "http://www.nevamarsell.com", + "followers": 4114 + }, + { + "firstname": "Brice", + "lastname": "Hedglin", + "company": "Cupkovic, Walter D Esq", + "address": "2809 Granny White Pike", + "city": "Nashville", + "country": "Davidson", + "state": "TN", + "zip": "37204", + "phone": "615-292-9016", + "fax": "615-292-9027", + "email": "brice@hedglin.com", + "web": "http://www.bricehedglin.com", + "followers": 7730 + }, + { + "firstname": "Terrance", + "lastname": "Nimmer", + "company": "C D Short Foods Inc", + "address": "1400 N Woodward Ave", + "city": "Bloomfield Hills", + "country": "Oakland", + "state": "MI", + "zip": "48304", + "phone": "248-647-0653", + "fax": "248-647-1999", + "email": "terrance@nimmer.com", + "web": "http://www.terrancenimmer.com", + "followers": 7388 + }, + { + "firstname": "Carol", + "lastname": "Krisman", + "company": "Uniglobe Transeas Travel", + "address": "100 E 85th St", + "city": "New York", + "country": "New York", + "state": "NY", + "zip": "10028", + "phone": "212-472-7877", + "fax": "212-472-9579", + "email": "carol@krisman.com", + "web": "http://www.carolkrisman.com", + "followers": 5985 + }, + { + "firstname": "Dollie", + "lastname": "Pillitteri", + "company": "Jiffy Moving & Storage Company", + "address": "4024 Merchant Rd", + "city": "Fort Wayne", + "country": "Allen", + "state": "IN", + "zip": "46818", + "phone": "260-489-3094", + "fax": "260-489-4697", + "email": "dollie@pillitteri.com", + "web": "http://www.dolliepillitteri.com", + "followers": 2624 + }, + { + "firstname": "Mellissa", + "lastname": "Sule", + "company": "Dowse, Geoffrey Esq", + "address": "92 Argonaut #-270", + "city": "Aliso Viejo", + "country": "Orange", + "state": "CA", + "zip": "92656", + "phone": "949-768-6176", + "fax": "949-768-8107", + "email": "mellissa@sule.com", + "web": "http://www.mellissasule.com", + "followers": 2709 + }, + { + "firstname": "Antony", + "lastname": "Thierauf", + "company": "Gutzwiller, Robert H Esq", + "address": "4915 Industrial Way", + "city": "Coeur d Alene", + "country": "Kootenai", + "state": "ID", + "zip": "83814", + "phone": "208-667-5252", + "fax": "208-667-5935", + "email": "antony@thierauf.com", + "web": "http://www.antonythierauf.com", + "followers": 1044 + }, + { + "firstname": "Reina", + "lastname": "Reisenauer", + "company": "Terrance Fox", + "address": "207 N Main St", + "city": "Hutchins", + "country": "Dallas", + "state": "TX", + "zip": "75141", + "phone": "972-225-9930", + "fax": "972-225-9569", + "email": "reina@reisenauer.com", + "web": "http://www.reinareisenauer.com", + "followers": 2953 + }, + { + "firstname": "Zane", + "lastname": "Sulikowski", + "company": "Meijer Associates Credit Union", + "address": "2375 3rd St", + "city": "Riverside", + "country": "Riverside", + "state": "CA", + "zip": "92507", + "phone": "951-683-4479", + "fax": "951-683-9932", + "email": "zane@sulikowski.com", + "web": "http://www.zanesulikowski.com", + "followers": 7275 + }, + { + "firstname": "Hilario", + "lastname": "Cassa", + "company": "Independence Assocaites Inc", + "address": "2222 Santa Monica Blvd", + "city": "Santa Monica", + "country": "Los Angeles", + "state": "CA", + "zip": "90404", + "phone": "310-828-6710", + "fax": "310-828-1895", + "email": "hilario@cassa.com", + "web": "http://www.hilariocassa.com", + "followers": 994 + }, + { + "firstname": "Veronica", + "lastname": "Radman", + "company": "Martin, Anthony D Esq", + "address": "235 W Main St", + "city": "Charlottesville", + "country": "Charlottesville City", + "state": "VA", + "zip": "22902", + "phone": "434-979-3306", + "fax": "434-979-9777", + "email": "veronica@radman.com", + "web": "http://www.veronicaradman.com", + "followers": 7568 + }, + { + "firstname": "Teri", + "lastname": "Erlewine", + "company": "League Of Kans Municipalities", + "address": "370 34th St St", + "city": "Saint Petersburg", + "country": "Pinellas", + "state": "FL", + "zip": "33711", + "phone": "727-327-3850", + "fax": "727-327-8494", + "email": "teri@erlewine.com", + "web": "http://www.terierlewine.com", + "followers": 6077 + }, + { + "firstname": "Alissa", + "lastname": "Mountjoy", + "company": "Technical & Mgmt Svc Corp", + "address": "6585 Commerce Blvd", + "city": "Rohnert Park", + "country": "Sonoma", + "state": "CA", + "zip": "94928", + "phone": "707-585-9715", + "fax": "707-585-7011", + "email": "alissa@mountjoy.com", + "web": "http://www.alissamountjoy.com", + "followers": 4886 + }, + { + "firstname": "Helene", + "lastname": "Iberg", + "company": "Spec Check Inc", + "address": "24800 Rockside Rd", + "city": "Bedford", + "country": "Cuyahoga", + "state": "OH", + "zip": "44146", + "phone": "440-786-6052", + "fax": "440-786-9246", + "email": "helene@iberg.com", + "web": "http://www.heleneiberg.com", + "followers": 716 + }, + { + "firstname": "Lona", + "lastname": "Scronce", + "company": "L & L Builders", + "address": "Rte 6 & 209", + "city": "Matamoras", + "country": "Pike", + "state": "PA", + "zip": "18336", + "phone": "570-296-4820", + "fax": "570-296-2054", + "email": "lona@scronce.com", + "web": "http://www.lonascronce.com", + "followers": 4687 + }, + { + "firstname": "Jeremy", + "lastname": "Lampi", + "company": "E Henderson Inc", + "address": "150 Sawkill Ave", + "city": "Milford", + "country": "Pike", + "state": "PA", + "zip": "18337", + "phone": "570-296-7797", + "fax": "570-296-4647", + "email": "jeremy@lampi.com", + "web": "http://www.jeremylampi.com", + "followers": 4714 + }, + { + "firstname": "Mitch", + "lastname": "Schattner", + "company": "Cosgrove Eisenberg & Kiley Pc", + "address": "3001 Geary Blvd", + "city": "San Francisco", + "country": "San Francisco", + "state": "CA", + "zip": "94118", + "phone": "415-668-8105", + "fax": "415-668-5841", + "email": "mitch@schattner.com", + "web": "http://www.mitchschattner.com", + "followers": 4388 + }, + { + "firstname": "Hans", + "lastname": "Carlan", + "company": "Midlen & Guillot Chartered", + "address": "509 W 4th Ave", + "city": "Anchorage", + "country": "Anchorage", + "state": "AK", + "zip": "99501", + "phone": "907-276-2956", + "fax": "907-276-6002", + "email": "hans@carlan.com", + "web": "http://www.hanscarlan.com", + "followers": 985 + }, + { + "firstname": "Concetta", + "lastname": "Sarchett", + "company": "Barco/chromatics Inc", + "address": "2405 Grand Blvd", + "city": "Kansas City", + "country": "Jackson", + "state": "MO", + "zip": "64108", + "phone": "816-274-3833", + "fax": "816-274-6897", + "email": "concetta@sarchett.com", + "web": "http://www.concettasarchett.com", + "followers": 3086 + }, + { + "firstname": "Isaac", + "lastname": "Zackery", + "company": "Holiday Inn Of Issaquah", + "address": "321 Palmer Rd", + "city": "Denville", + "country": "Morris", + "state": "NJ", + "zip": "07834", + "phone": "973-328-5943", + "fax": "973-328-1903", + "email": "isaac@zackery.com", + "web": "http://www.isaaczackery.com", + "followers": 501 + }, + { + "firstname": "Doug", + "lastname": "Matrisciano", + "company": "Cefpi", + "address": "12500 Ne 10th Pl", + "city": "Bellevue", + "country": "King", + "state": "WA", + "zip": "98005", + "phone": "425-451-5906", + "fax": "425-451-1273", + "email": "doug@matrisciano.com", + "web": "http://www.dougmatrisciano.com", + "followers": 9054 + }, + { + "firstname": "Devon", + "lastname": "Samrah", + "company": "Software Pursuits Inc", + "address": "1219 Pine Ave", + "city": "Orlando", + "country": "Orange", + "state": "FL", + "zip": "32824", + "phone": "407-240-2401", + "fax": "407-240-8312", + "email": "devon@samrah.com", + "web": "http://www.devonsamrah.com", + "followers": 6795 + }, + { + "firstname": "Amos", + "lastname": "Linnan", + "company": "Quincy, Jim", + "address": "3960 W 26th St", + "city": "Chicago", + "country": "Cook", + "state": "IL", + "zip": "60623", + "phone": "773-277-8332", + "fax": "773-277-4756", + "email": "amos@linnan.com", + "web": "http://www.amoslinnan.com", + "followers": 6297 + }, + { + "firstname": "Manuel", + "lastname": "Dienhart", + "company": "Bohning Co Ltd", + "address": "40 E Mcmicken Ave", + "city": "Cincinnati", + "country": "Hamilton", + "state": "OH", + "zip": "45210", + "phone": "513-357-4669", + "fax": "513-357-7989", + "email": "manuel@dienhart.com", + "web": "http://www.manueldienhart.com", + "followers": 6771 + }, + { + "firstname": "Audra", + "lastname": "Cantu", + "company": "Chesapeake Telephone Systems", + "address": "935 S 2nd St", + "city": "Plainfield", + "country": "Union", + "state": "NJ", + "zip": "07063", + "phone": "908-756-1816", + "fax": "908-756-5441", + "email": "audra@cantu.com", + "web": "http://www.audracantu.com", + "followers": 3088 + }, + { + "firstname": "Keisha", + "lastname": "Ransonet", + "company": "Hsk Decker", + "address": "1049 Lakloey Dr", + "city": "North Pole", + "country": "Fairbanks North Star", + "state": "AK", + "zip": "99705", + "phone": "907-488-6897", + "fax": "907-488-2093", + "email": "keisha@ransonet.com", + "web": "http://www.keisharansonet.com", + "followers": 5340 + }, + { + "firstname": "Rolando", + "lastname": "Baumann", + "company": "Erie Brush Co", + "address": "921 Sw Washington St #-321", + "city": "Portland", + "country": "Multnomah", + "state": "OR", + "zip": "97205", + "phone": "503-241-6723", + "fax": "503-241-7691", + "email": "rolando@baumann.com", + "web": "http://www.rolandobaumann.com", + "followers": 9754 + }, + { + "firstname": "Maryanne", + "lastname": "Whyman", + "company": "Walls, Robert E Esq", + "address": "1008 S San Pedro St", + "city": "Los Angeles", + "country": "Los Angeles", + "state": "CA", + "zip": "90015", + "phone": "213-748-1137", + "fax": "213-748-0447", + "email": "maryanne@whyman.com", + "web": "http://www.maryannewhyman.com", + "followers": 844 + }, + { + "firstname": "Kurtis", + "lastname": "Asberry", + "company": "Budgetel Inns", + "address": "Box #-37223", + "city": "El Paso", + "country": "El Paso", + "state": "TX", + "zip": "79937", + "phone": "915-591-1621", + "fax": "915-591-3614", + "email": "kurtis@asberry.com", + "web": "http://www.kurtisasberry.com", + "followers": 8502 + }, + { + "firstname": "Ed", + "lastname": "Gompf", + "company": "Corro Therm Inc", + "address": "3 B Floor Care & Hskpg Svc", + "city": "Catawissa", + "country": "Columbia", + "state": "PA", + "zip": "17820", + "phone": "570-799-2838", + "fax": "570-799-4583", + "email": "ed@gompf.com", + "web": "http://www.edgompf.com", + "followers": 8705 + }, + { + "firstname": "Norman", + "lastname": "Betance", + "company": "Precision Electric Co Inc", + "address": "7949 E Acoma Dr", + "city": "Scottsdale", + "country": "Maricopa", + "state": "AZ", + "zip": "85260", + "phone": "480-991-7884", + "fax": "480-991-6547", + "email": "norman@betance.com", + "web": "http://www.normanbetance.com", + "followers": 4602 + }, + { + "firstname": "Berta", + "lastname": "Karczewski", + "company": "Sather Eng Inc", + "address": "1035 N Mcqueen Rd #-133", + "city": "Gilbert", + "country": "Maricopa", + "state": "AZ", + "zip": "85233", + "phone": "480-926-0770", + "fax": "480-926-7533", + "email": "berta@karczewski.com", + "web": "http://www.bertakarczewski.com", + "followers": 1093 + }, + { + "firstname": "Mac", + "lastname": "Marksberry", + "company": "Pursell, David B Esq", + "address": "112 W Plum", + "city": "Doniphan", + "country": "Hall", + "state": "NE", + "zip": "68832", + "phone": "402-845-4275", + "fax": "402-845-8229", + "email": "mac@marksberry.com", + "web": "http://www.macmarksberry.com", + "followers": 6081 + }, + { + "firstname": "Sandra", + "lastname": "Graen", + "company": "Action Remediation Co", + "address": "106 Erie St", + "city": "Hutchinson", + "country": "McLeod", + "state": "MN", + "zip": "55350", + "phone": "320-587-3844", + "fax": "320-587-7201", + "email": "sandra@graen.com", + "web": "http://www.sandragraen.com", + "followers": 4844 + }, + { + "firstname": "Lee", + "lastname": "Javens", + "company": "Dyer, James R Esq", + "address": "6086 N Lyons Rd", + "city": "Burlington", + "country": "Racine", + "state": "WI", + "zip": "53105", + "phone": "262-763-9582", + "fax": "262-763-3845", + "email": "lee@javens.com", + "web": "http://www.leejavens.com", + "followers": 2954 + }, + { + "firstname": "Fran", + "lastname": "Zanders", + "company": "River City Body Co", + "address": "6312 S Yellowstone Hwy", + "city": "Idaho Falls", + "country": "Bonneville", + "state": "ID", + "zip": "83402", + "phone": "208-525-6418", + "fax": "208-525-5501", + "email": "fran@zanders.com", + "web": "http://www.franzanders.com", + "followers": 9590 + }, + { + "firstname": "Lane", + "lastname": "Brantz", + "company": "Kings Inn", + "address": "106 Erie St", + "city": "Hutchinson", + "country": "McLeod", + "state": "MN", + "zip": "55350", + "phone": "320-587-2903", + "fax": "320-587-3448", + "email": "lane@brantz.com", + "web": "http://www.lanebrantz.com", + "followers": 361 + }, + { + "firstname": "Bess", + "lastname": "Marso", + "company": "Lesher Printers Inc", + "address": "15542 Chemical Ln", + "city": "Huntington Beach", + "country": "Orange", + "state": "CA", + "zip": "92649", + "phone": "714-895-4582", + "fax": "714-895-8188", + "email": "bess@marso.com", + "web": "http://www.bessmarso.com", + "followers": 9552 + }, + { + "firstname": "Tamara", + "lastname": "Declue", + "company": "Glen Burnie The Bank Of", + "address": "1900 W Loop S #-600", + "city": "Houston", + "country": "Harris", + "state": "TX", + "zip": "77027", + "phone": "713-871-3958", + "fax": "713-871-6355", + "email": "tamara@declue.com", + "web": "http://www.tamaradeclue.com", + "followers": 3229 + }, + { + "firstname": "Denise", + "lastname": "Speegle", + "company": "Shipley Oil Company", + "address": "2078 Foster Ave", + "city": "Wheeling", + "country": "Cook", + "state": "IL", + "zip": "60090", + "phone": "847-870-8743", + "fax": "847-870-6026", + "email": "denise@speegle.com", + "web": "http://www.denisespeegle.com", + "followers": 1139 + }, + { + "firstname": "Lynda", + "lastname": "Youtsey", + "company": "Accurate Color Inc", + "address": "1370 S Bertelsen Rd", + "city": "Eugene", + "country": "Lane", + "state": "OR", + "zip": "97402", + "phone": "541-342-0606", + "fax": "541-342-0655", + "email": "lynda@youtsey.com", + "web": "http://www.lyndayoutsey.com", + "followers": 378 + }, + { + "firstname": "Diann", + "lastname": "Burigsay", + "company": "Snyder, Stephen E Esq", + "address": "13026 S Normandie Ave", + "city": "Gardena", + "country": "Los Angeles", + "state": "CA", + "zip": "90249", + "phone": "310-321-8278", + "fax": "310-321-0564", + "email": "diann@burigsay.com", + "web": "http://www.diannburigsay.com", + "followers": 6193 + }, + { + "firstname": "Mari", + "lastname": "Hwang", + "company": "Play Craft Pontoon Co", + "address": "23352 El Toro Rd", + "city": "Lake Forest", + "country": "Orange", + "state": "CA", + "zip": "92630", + "phone": "949-583-6901", + "fax": "949-583-7758", + "email": "mari@hwang.com", + "web": "http://www.marihwang.com", + "followers": 6719 + }, + { + "firstname": "Shanna", + "lastname": "Neundorfer", + "company": "Door Systems", + "address": "833 E Allegheny Ave", + "city": "Philadelphia", + "country": "Philadelphia", + "state": "PA", + "zip": "19134", + "phone": "215-426-9722", + "fax": "215-426-8416", + "email": "shanna@neundorfer.com", + "web": "http://www.shannaneundorfer.com", + "followers": 9759 + }, + { + "firstname": "Sherwood", + "lastname": "Detillier", + "company": "Minteq International", + "address": "Box #-851", + "city": "Woodland Hills", + "country": "Los Angeles", + "state": "CA", + "zip": "91365", + "phone": "818-703-9160", + "fax": "818-703-0447", + "email": "sherwood@detillier.com", + "web": "http://www.sherwooddetillier.com", + "followers": 6816 + }, + { + "firstname": "Walton", + "lastname": "Schwallie", + "company": "Nielsen, Laura W Md", + "address": "154 Main St", + "city": "Upton", + "country": "Worcester", + "state": "MA", + "zip": "01568", + "phone": "508-529-8783", + "fax": "508-529-8368", + "email": "walton@schwallie.com", + "web": "http://www.waltonschwallie.com", + "followers": 4498 + }, + { + "firstname": "Judy", + "lastname": "Gartenmayer", + "company": "Pro Infusion Pharm Inc", + "address": "3260 W New Haven Ave", + "city": "Melbourne", + "country": "Brevard", + "state": "FL", + "zip": "32904", + "phone": "321-676-3091", + "fax": "321-676-3378", + "email": "judy@gartenmayer.com", + "web": "http://www.judygartenmayer.com", + "followers": 5730 + }, + { + "firstname": "Antione", + "lastname": "Mccleary", + "company": "Cerberus Pyrotronics", + "address": "1110 25th Ave N", + "city": "Fargo", + "country": "Cass", + "state": "ND", + "zip": "58102", + "phone": "701-293-8410", + "fax": "701-293-7439", + "email": "antione@mccleary.com", + "web": "http://www.antionemccleary.com", + "followers": 5273 + }, + { + "firstname": "Kay", + "lastname": "Ganguli", + "company": "Hanson, Bruce Esq", + "address": "3763 Scripps Dr", + "city": "Las Vegas", + "country": "Clark", + "state": "NV", + "zip": "89103", + "phone": "702-876-3089", + "fax": "702-876-9367", + "email": "kay@ganguli.com", + "web": "http://www.kayganguli.com", + "followers": 6368 + }, + { + "firstname": "Oma", + "lastname": "Duffy", + "company": "Laun Law Offices", + "address": "255 Industrial Dr", + "city": "Franklin", + "country": "Warren", + "state": "OH", + "zip": "45005", + "phone": "937-746-7537", + "fax": "937-746-4129", + "email": "oma@duffy.com", + "web": "http://www.omaduffy.com", + "followers": 9375 + }, + { + "firstname": "Devon", + "lastname": "Teston", + "company": "Bilton, Dean H Esq", + "address": "1900 W Loop S", + "city": "Houston", + "country": "Harris", + "state": "TX", + "zip": "77027", + "phone": "713-871-9773", + "fax": "713-871-0838", + "email": "devon@teston.com", + "web": "http://www.devonteston.com", + "followers": 3426 + }, + { + "firstname": "Jade", + "lastname": "Erlebach", + "company": "Vickery Tape & Label Co Inc", + "address": "975 Flynn Rd", + "city": "Camarillo", + "country": "Ventura", + "state": "CA", + "zip": "93012", + "phone": "805-445-8331", + "fax": "805-445-9961", + "email": "jade@erlebach.com", + "web": "http://www.jadeerlebach.com", + "followers": 4178 + }, + { + "firstname": "Roseann", + "lastname": "Jerko", + "company": "Larry Farmer Appraisal Co Inc", + "address": "850 Glen Ave", + "city": "Moorestown", + "country": "Burlington", + "state": "NJ", + "zip": "08057", + "phone": "856-866-4945", + "fax": "856-866-1542", + "email": "roseann@jerko.com", + "web": "http://www.roseannjerko.com", + "followers": 5397 + }, + { + "firstname": "Ruthie", + "lastname": "Zortman", + "company": "Review Monterey Peninsula", + "address": "4508 Enterprise St", + "city": "Fremont", + "country": "Alameda", + "state": "CA", + "zip": "94538", + "phone": "510-651-1410", + "fax": "510-651-1242", + "email": "ruthie@zortman.com", + "web": "http://www.ruthiezortman.com", + "followers": 6079 + }, + { + "firstname": "Leif", + "lastname": "Arguin", + "company": "Cmplt Cmptg Solutions Ne", + "address": "4508 Enterprise St", + "city": "Fremont", + "country": "Alameda", + "state": "CA", + "zip": "94538", + "phone": "510-651-4937", + "fax": "510-651-8302", + "email": "leif@arguin.com", + "web": "http://www.leifarguin.com", + "followers": 6571 + }, + { + "firstname": "Millicent", + "lastname": "Ekstrom", + "company": "Personal Creations Inc", + "address": "151 Brown St #-b", + "city": "Lawrenceburg", + "country": "Dearborn", + "state": "IN", + "zip": "47025", + "phone": "812-537-7287", + "fax": "812-537-5442", + "email": "millicent@ekstrom.com", + "web": "http://www.millicentekstrom.com", + "followers": 5739 + }, + { + "firstname": "Val", + "lastname": "Oborne", + "company": "Stone Container Corporation", + "address": "7846 Clybourn Ave", + "city": "Sun Valley", + "country": "Los Angeles", + "state": "CA", + "zip": "91352", + "phone": "818-767-1347", + "fax": "818-767-5123", + "email": "val@oborne.com", + "web": "http://www.valoborne.com", + "followers": 6746 + }, + { + "firstname": "Bridgett", + "lastname": "Retort", + "company": "Womens Resource & Refrl Ntwrk", + "address": "6747 Signat Dr", + "city": "Houston", + "country": "Harris", + "state": "TX", + "zip": "77041", + "phone": "713-466-7259", + "fax": "713-466-3278", + "email": "bridgett@retort.com", + "web": "http://www.bridgettretort.com", + "followers": 3060 + }, + { + "firstname": "Tia", + "lastname": "Lino", + "company": "Superior Gundrilling", + "address": "35375 Highway 228", + "city": "Brownsville", + "country": "Linn", + "state": "OR", + "zip": "97327", + "phone": "541-466-2483", + "fax": "541-466-1661", + "email": "tia@lino.com", + "web": "http://www.tialino.com", + "followers": 8942 + }, + { + "firstname": "Jarrett", + "lastname": "Kenzie", + "company": "Young Men Christian Assn Cnty", + "address": "11551 Riverpark Way", + "city": "Chesterfield", + "country": "Chesterfield", + "state": "VA", + "zip": "23838", + "phone": "804-739-3007", + "fax": "804-739-7905", + "email": "jarrett@kenzie.com", + "web": "http://www.jarrettkenzie.com", + "followers": 9459 + }, + { + "firstname": "Mara", + "lastname": "Vanderzwaag", + "company": "Brown & Brown Law Office", + "address": "2550 E Lucas Dr", + "city": "Beaumont", + "country": "Jefferson", + "state": "TX", + "zip": "77703", + "phone": "409-892-1231", + "fax": "409-892-8492", + "email": "mara@vanderzwaag.com", + "web": "http://www.maravanderzwaag.com", + "followers": 2331 + }, + { + "firstname": "Tiffany", + "lastname": "Knust", + "company": "Vantage Products", + "address": "1425 Koll Cir #-107", + "city": "San Jose", + "country": "Santa Clara", + "state": "CA", + "zip": "95112", + "phone": "408-453-0357", + "fax": "408-453-1525", + "email": "tiffany@knust.com", + "web": "http://www.tiffanyknust.com", + "followers": 2896 + }, + { + "firstname": "Fabian", + "lastname": "Mcshaw", + "company": "Bodik, Michael G Esq", + "address": "6023 Garfield Ave", + "city": "Los Angeles", + "country": "Los Angeles", + "state": "CA", + "zip": "90040", + "phone": "323-726-5319", + "fax": "323-726-8499", + "email": "fabian@mcshaw.com", + "web": "http://www.fabianmcshaw.com", + "followers": 4892 + }, + { + "firstname": "Annabelle", + "lastname": "Coger", + "company": "Center For Resource Management", + "address": "1200 Shreveport Barksdale Hwy", + "city": "Shreveport", + "country": "Caddo", + "state": "LA", + "zip": "71105", + "phone": "318-865-8418", + "fax": "318-865-7381", + "email": "annabelle@coger.com", + "web": "http://www.annabellecoger.com", + "followers": 2623 + }, + { + "firstname": "Marisa", + "lastname": "Smiler", + "company": "Star Systems Inc", + "address": "200 Broadhollow Rd", + "city": "Melville", + "country": "Suffolk", + "state": "NY", + "zip": "11747", + "phone": "631-673-3339", + "fax": "631-673-1556", + "email": "marisa@smiler.com", + "web": "http://www.marisasmiler.com", + "followers": 4693 + }, + { + "firstname": "Samantha", + "lastname": "Bordwell", + "company": "Interwest Freight System Inc", + "address": "23405 Sw 152nd Ct", + "city": "Homestead", + "country": "Miami-Dade", + "state": "FL", + "zip": "33032", + "phone": "305-247-8402", + "fax": "305-247-4599", + "email": "samantha@bordwell.com", + "web": "http://www.samanthabordwell.com", + "followers": 6109 + }, + { + "firstname": "Felecia", + "lastname": "Riedl", + "company": "Benson, John S", + "address": "333 Andrew Ave", + "city": "Salt Lake City", + "country": "Salt Lake", + "state": "UT", + "zip": "84115", + "phone": "801-486-6484", + "fax": "801-486-6755", + "email": "felecia@riedl.com", + "web": "http://www.feleciariedl.com", + "followers": 7849 + }, + { + "firstname": "Kris", + "lastname": "Persson", + "company": "Tweel, Ronald R Esq", + "address": "1765 Sw Highway 97", + "city": "Madras", + "country": "Jefferson", + "state": "OR", + "zip": "97741", + "phone": "541-475-8404", + "fax": "541-475-0021", + "email": "kris@persson.com", + "web": "http://www.krispersson.com", + "followers": 232 + }, + { + "firstname": "Kylie", + "lastname": "Bridgeman", + "company": "Thomas & Libowitz Pa", + "address": "118 Lenzner Ct", + "city": "Sewickley", + "country": "Allegheny", + "state": "PA", + "zip": "15143", + "phone": "412-741-4604", + "fax": "412-741-4236", + "email": "kylie@bridgeman.com", + "web": "http://www.kyliebridgeman.com", + "followers": 9868 + }, + { + "firstname": "Eduardo", + "lastname": "Bellendir", + "company": "Powers & Assocs", + "address": "1800 Pine Run Rd", + "city": "Wilkes Barre", + "country": "Luzerne", + "state": "PA", + "zip": "18702", + "phone": "570-822-0721", + "fax": "570-822-6267", + "email": "eduardo@bellendir.com", + "web": "http://www.eduardobellendir.com", + "followers": 597 + }, + { + "firstname": "Waldo", + "lastname": "Edberg", + "company": "Bush Building Corporation", + "address": "2017 W Jackson St", + "city": "Tupelo", + "country": "Lee", + "state": "MS", + "zip": "38801", + "phone": "662-842-4133", + "fax": "662-842-8645", + "email": "waldo@edberg.com", + "web": "http://www.waldoedberg.com", + "followers": 6609 + }, + { + "firstname": "Brent", + "lastname": "Vaidya", + "company": "Crain Industries", + "address": "45 Church St", + "city": "Stamford", + "country": "Fairfield", + "state": "CT", + "zip": "06906", + "phone": "203-359-2824", + "fax": "203-359-6466", + "email": "brent@vaidya.com", + "web": "http://www.brentvaidya.com", + "followers": 3729 + }, + { + "firstname": "Bette", + "lastname": "Barcelona", + "company": "Fischer, William R Esq", + "address": "432 Lignite Ave", + "city": "Fairbanks", + "country": "Fairbanks North Star", + "state": "AK", + "zip": "99701", + "phone": "907-456-6738", + "fax": "907-456-4144", + "email": "bette@barcelona.com", + "web": "http://www.bettebarcelona.com", + "followers": 5857 + }, + { + "firstname": "Rich", + "lastname": "Gleave", + "company": "Finkelstein, Bernard A Cpa", + "address": "827 E 10th Ave", + "city": "Anchorage", + "country": "Anchorage", + "state": "AK", + "zip": "99501", + "phone": "907-277-9294", + "fax": "907-277-2227", + "email": "rich@gleave.com", + "web": "http://www.richgleave.com", + "followers": 488 + }, + { + "firstname": "Lyman", + "lastname": "Whittley", + "company": "Berry, Robert A Esq", + "address": "3030 Bridgeway", + "city": "Sausalito", + "country": "Marin", + "state": "CA", + "zip": "94965", + "phone": "415-332-9570", + "fax": "415-332-7303", + "email": "lyman@whittley.com", + "web": "http://www.lymanwhittley.com", + "followers": 7950 + }, + { + "firstname": "Maryann", + "lastname": "Garnette", + "company": "Catholic University Of", + "address": "582 Centerville Rd", + "city": "Lancaster", + "country": "Lancaster", + "state": "PA", + "zip": "17601", + "phone": "717-560-6671", + "fax": "717-560-5625", + "email": "maryann@garnette.com", + "web": "http://www.maryanngarnette.com", + "followers": 5412 + }, + { + "firstname": "Jimmie", + "lastname": "Zarzycki", + "company": "John C Auth", + "address": "215 E Pikes Peak Ave", + "city": "Colorado Springs", + "country": "El Paso", + "state": "CO", + "zip": "80903", + "phone": "719-632-0667", + "fax": "719-632-5612", + "email": "jimmie@zarzycki.com", + "web": "http://www.jimmiezarzycki.com", + "followers": 4291 + }, + { + "firstname": "Gisela", + "lastname": "Kosicki", + "company": "Lisher, John L Esq", + "address": "22140 Ventura Blvd #-4", + "city": "Woodland Hills", + "country": "Los Angeles", + "state": "CA", + "zip": "91364", + "phone": "818-713-6306", + "fax": "818-713-8346", + "email": "gisela@kosicki.com", + "web": "http://www.giselakosicki.com", + "followers": 377 + }, + { + "firstname": "Marlene", + "lastname": "Hammeren", + "company": "Chamot, Philip S Esq", + "address": "1000 Monte Sano Blvd Se", + "city": "Huntsville", + "country": "Madison", + "state": "AL", + "zip": "35801", + "phone": "256-533-8674", + "fax": "256-533-1176", + "email": "marlene@hammeren.com", + "web": "http://www.marlenehammeren.com", + "followers": 428 + }, + { + "firstname": "Kris", + "lastname": "Stanzak", + "company": "Cenref Labs", + "address": "3100 Dodge St", + "city": "Dubuque", + "country": "Dubuque", + "state": "IA", + "zip": "52003", + "phone": "563-557-2588", + "fax": "563-557-6308", + "email": "kris@stanzak.com", + "web": "http://www.krisstanzak.com", + "followers": 368 + }, + { + "firstname": "Roman", + "lastname": "Simone", + "company": "Spottswood, William B Esq", + "address": "610 W Main St", + "city": "Batavia", + "country": "Clermont", + "state": "OH", + "zip": "45103", + "phone": "513-732-3089", + "fax": "513-732-2547", + "email": "roman@simone.com", + "web": "http://www.romansimone.com", + "followers": 3460 + }, + { + "firstname": "Cathryn", + "lastname": "Nicolaus", + "company": "Perkins Photo/graphics Inc", + "address": "2575 State Highway 32", + "city": "Chico", + "country": "Butte", + "state": "CA", + "zip": "95973", + "phone": "530-345-4627", + "fax": "530-345-8372", + "email": "cathryn@nicolaus.com", + "web": "http://www.cathrynnicolaus.com", + "followers": 9494 + }, + { + "firstname": "Lana", + "lastname": "Keels", + "company": "Veron, J Michael Esq", + "address": "711 Park Ave", + "city": "Freehold", + "country": "Monmouth", + "state": "NJ", + "zip": "07728", + "phone": "732-462-1106", + "fax": "732-462-3575", + "email": "lana@keels.com", + "web": "http://www.lanakeels.com", + "followers": 2796 + }, + { + "firstname": "Malissa", + "lastname": "Ziesemer", + "company": "Electron Rentals Inc", + "address": "330 S Ocean Blvd", + "city": "Palm Beach", + "country": "Palm Beach", + "state": "FL", + "zip": "33480", + "phone": "561-655-6443", + "fax": "561-655-9129", + "email": "malissa@ziesemer.com", + "web": "http://www.malissaziesemer.com", + "followers": 7525 + }, + { + "firstname": "Pamala", + "lastname": "Brodtmann", + "company": "Gagen, William E Jr", + "address": "342 Seaside Ave", + "city": "Honolulu", + "country": "Honolulu", + "state": "HI", + "zip": "96815", + "phone": "808-926-0776", + "fax": "808-926-6173", + "email": "pamala@brodtmann.com", + "web": "http://www.pamalabrodtmann.com", + "followers": 134 + }, + { + "firstname": "Heriberto", + "lastname": "Tivis", + "company": "Newood", + "address": "1135 Kildaire Farm Rd", + "city": "Cary", + "country": "Wake", + "state": "NC", + "zip": "27511", + "phone": "919-460-8104", + "fax": "919-460-4304", + "email": "heriberto@tivis.com", + "web": "http://www.heribertotivis.com", + "followers": 2418 + }, + { + "firstname": "Edgardo", + "lastname": "Prudente", + "company": "R A Hamilton Corp", + "address": "1110 N Highway 360", + "city": "Grand Prairie", + "country": "Dallas", + "state": "TX", + "zip": "75050", + "phone": "972-660-3960", + "fax": "972-660-0934", + "email": "edgardo@prudente.com", + "web": "http://www.edgardoprudente.com", + "followers": 3269 + }, + { + "firstname": "Fred", + "lastname": "Kunde", + "company": "Swanson, Victoria C Esq", + "address": "5321 Sterling Center Dr", + "city": "Westlake Village", + "country": "Ventura", + "state": "CA", + "zip": "91361", + "phone": "805-991-9740", + "fax": "805-991-4665", + "email": "fred@kunde.com", + "web": "http://www.fredkunde.com", + "followers": 7741 + }, + { + "firstname": "Pilar", + "lastname": "Suddeth", + "company": "Slant Fin Corp", + "address": "3700 Campus Dr", + "city": "Newport Beach", + "country": "Orange", + "state": "CA", + "zip": "92660", + "phone": "949-852-5463", + "fax": "949-852-9027", + "email": "pilar@suddeth.com", + "web": "http://www.pilarsuddeth.com", + "followers": 4094 + }, + { + "firstname": "Eliseo", + "lastname": "Wice", + "company": "A Limousine Service", + "address": "711 W 38th St", + "city": "Austin", + "country": "Travis", + "state": "TX", + "zip": "78705", + "phone": "512-458-0034", + "fax": "512-458-7226", + "email": "eliseo@wice.com", + "web": "http://www.eliseowice.com", + "followers": 7508 + }, + { + "firstname": "Bridget", + "lastname": "Knightly", + "company": "Teamsters Union Local 20", + "address": "66 Flint St", + "city": "Asheville", + "country": "Buncombe", + "state": "NC", + "zip": "28801", + "phone": "828-251-0817", + "fax": "828-251-4242", + "email": "bridget@knightly.com", + "web": "http://www.bridgetknightly.com", + "followers": 1212 + }, + { + "firstname": "Tori", + "lastname": "Villaescusa", + "company": "Church Point Whol Gr Co Inc", + "address": "1006 S San Pedro St", + "city": "Los Angeles", + "country": "Los Angeles", + "state": "CA", + "zip": "90015", + "phone": "213-748-7617", + "fax": "213-748-5668", + "email": "tori@villaescusa.com", + "web": "http://www.torivillaescusa.com", + "followers": 9093 + }, + { + "firstname": "Claire", + "lastname": "Moyerman", + "company": "Grt Nthrn Shoe Rpr & Dry Clnrs", + "address": "2280 S Xanadu Way #-300", + "city": "Aurora", + "country": "Arapahoe", + "state": "CO", + "zip": "80014", + "phone": "303-337-5701", + "fax": "303-337-5796", + "email": "claire@moyerman.com", + "web": "http://www.clairemoyerman.com", + "followers": 5959 + }, + { + "firstname": "Judi", + "lastname": "Kivel", + "company": "Postal Place At 111th Square", + "address": "125 N Emporia St", + "city": "Wichita", + "country": "Sedgwick", + "state": "KS", + "zip": "67202", + "phone": "316-267-2178", + "fax": "316-267-5183", + "email": "judi@kivel.com", + "web": "http://www.judikivel.com", + "followers": 6139 + }, + { + "firstname": "Terrell", + "lastname": "Rodda", + "company": "Woodland Village Nursing Home", + "address": "200 Cottontail Ln", + "city": "Somerset", + "country": "Somerset", + "state": "NJ", + "zip": "08873", + "phone": "732-563-5361", + "fax": "732-563-1293", + "email": "terrell@rodda.com", + "web": "http://www.terrellrodda.com", + "followers": 3803 + }, + { + "firstname": "Jasmin", + "lastname": "Gum", + "company": "White, Samuel I Esq", + "address": "43 Parmenter Rd", + "city": "Hudson", + "country": "Middlesex", + "state": "MA", + "zip": "01749", + "phone": "978-562-2524", + "fax": "978-562-5062", + "email": "jasmin@gum.com", + "web": "http://www.jasmingum.com", + "followers": 9074 + }, + { + "firstname": "Bridget", + "lastname": "Bottella", + "company": "Mid State Construction Prod", + "address": "112 E Pecan St", + "city": "San Antonio", + "country": "Bexar", + "state": "TX", + "zip": "78205", + "phone": "210-224-9708", + "fax": "210-224-4881", + "email": "bridget@bottella.com", + "web": "http://www.bridgetbottella.com", + "followers": 5951 + }, + { + "firstname": "Tami", + "lastname": "Trybus", + "company": "Seawright, Rodney", + "address": "3963 Virginia Ave", + "city": "Cincinnati", + "country": "Hamilton", + "state": "OH", + "zip": "45227", + "phone": "513-561-1096", + "fax": "513-561-7531", + "email": "tami@trybus.com", + "web": "http://www.tamitrybus.com", + "followers": 370 + }, + { + "firstname": "Maynard", + "lastname": "Kaewprasert", + "company": "Decatur Studio Inc", + "address": "1224 S Hope St", + "city": "Los Angeles", + "country": "Los Angeles", + "state": "CA", + "zip": "90015", + "phone": "213-747-6026", + "fax": "213-747-3088", + "email": "maynard@kaewprasert.com", + "web": "http://www.maynardkaewprasert.com", + "followers": 711 + }, + { + "firstname": "Viola", + "lastname": "Mcsorley", + "company": "First Bank Of Brunswick", + "address": "6850 S Harlem Ave", + "city": "Summit Argo", + "country": "Cook", + "state": "IL", + "zip": "60501", + "phone": "708-496-7428", + "fax": "708-496-8587", + "email": "viola@mcsorley.com", + "web": "http://www.violamcsorley.com", + "followers": 7687 + }, + { + "firstname": "Reggie", + "lastname": "Streu", + "company": "Als Motors Inc", + "address": "15 Henderson Dr", + "city": "Caldwell", + "country": "Essex", + "state": "NJ", + "zip": "07006", + "phone": "973-575-5898", + "fax": "973-575-9328", + "email": "reggie@streu.com", + "web": "http://www.reggiestreu.com", + "followers": 971 + }, + { + "firstname": "Rena", + "lastname": "Griffeth", + "company": "Reliable Optical", + "address": "19901 Nordhoff St", + "city": "Northridge", + "country": "Los Angeles", + "state": "CA", + "zip": "91324", + "phone": "818-709-9165", + "fax": "818-709-2649", + "email": "rena@griffeth.com", + "web": "http://www.renagriffeth.com", + "followers": 6336 + }, + { + "firstname": "Pierre", + "lastname": "Salera", + "company": "Ridley Ridley & Burnette", + "address": "1601 S Shamrock Ave", + "city": "Monrovia", + "country": "Los Angeles", + "state": "CA", + "zip": "91016", + "phone": "626-303-9233", + "fax": "626-303-2569", + "email": "pierre@salera.com", + "web": "http://www.pierresalera.com", + "followers": 6542 + }, + { + "firstname": "Carolina", + "lastname": "Kinlaw", + "company": "Loftus, Daniel B Esq", + "address": "3m country", + "city": "Belle Mead", + "country": "Somerset", + "state": "NJ", + "zip": "08502", + "phone": "908-874-0864", + "fax": "908-874-4873", + "email": "carolina@kinlaw.com", + "web": "http://www.carolinakinlaw.com", + "followers": 8944 + }, + { + "firstname": "Alejandra", + "lastname": "Prenatt", + "company": "Mitchell De Burring Co", + "address": "6850 S Harlem Ave", + "city": "Summit Argo", + "country": "Cook", + "state": "IL", + "zip": "60501", + "phone": "708-496-6958", + "fax": "708-496-4617", + "email": "alejandra@prenatt.com", + "web": "http://www.alejandraprenatt.com", + "followers": 4118 + }, + { + "firstname": "Quintin", + "lastname": "Isacson", + "company": "Spectrum Constrctn & Dev Corp", + "address": "1015 N Cahuenga Blvd", + "city": "Los Angeles", + "country": "Los Angeles", + "state": "CA", + "zip": "90038", + "phone": "323-469-0643", + "fax": "323-469-3082", + "email": "quintin@isacson.com", + "web": "http://www.quintinisacson.com", + "followers": 94 + }, + { + "firstname": "Robin", + "lastname": "Grotz", + "company": "Hackett, Peter J", + "address": "2601 Summerhill Rd", + "city": "Texarkana", + "country": "Bowie", + "state": "TX", + "zip": "75503", + "phone": "903-792-2081", + "fax": "903-792-5309", + "email": "robin@grotz.com", + "web": "http://www.robingrotz.com", + "followers": 2532 + }, + { + "firstname": "Lacy", + "lastname": "Woodfin", + "company": "Enviro Dynamics", + "address": "130 Wyoming Ave", + "city": "Scranton", + "country": "Lackawanna", + "state": "PA", + "zip": "18503", + "phone": "570-348-3754", + "fax": "570-348-4204", + "email": "lacy@woodfin.com", + "web": "http://www.lacywoodfin.com", + "followers": 4644 + }, + { + "firstname": "Daniel", + "lastname": "Zill", + "company": "Safety Team Inc", + "address": "550 N Brand Blvd #-1940", + "city": "Glendale", + "country": "Los Angeles", + "state": "CA", + "zip": "91203", + "phone": "818-507-7207", + "fax": "818-507-1925", + "email": "daniel@zill.com", + "web": "http://www.danielzill.com", + "followers": 2051 + }, + { + "firstname": "Reina", + "lastname": "Wolchesky", + "company": "Highland Management Group", + "address": "305 W Washington St", + "city": "Brainerd", + "country": "Crow Wing", + "state": "MN", + "zip": "56401", + "phone": "218-828-7281", + "fax": "218-828-3231", + "email": "reina@wolchesky.com", + "web": "http://www.reinawolchesky.com", + "followers": 9240 + }, + { + "firstname": "Marc", + "lastname": "Wanger", + "company": "Welsh Company", + "address": "33 Harrison Ave", + "city": "Boston", + "country": "Suffolk", + "state": "MA", + "zip": "02111", + "phone": "617-426-6393", + "fax": "617-426-1114", + "email": "marc@wanger.com", + "web": "http://www.marcwanger.com", + "followers": 2846 + }, + { + "firstname": "Damion", + "lastname": "Matkin", + "company": "Data Ware Development Inc", + "address": "5830 Downing St #-d", + "city": "Denver", + "country": "Denver", + "state": "CO", + "zip": "80216", + "phone": "303-295-4797", + "fax": "303-295-3867", + "email": "damion@matkin.com", + "web": "http://www.damionmatkin.com", + "followers": 5752 + }, + { + "firstname": "Lucius", + "lastname": "Winchester", + "company": "Barrett Paving Materials Inc", + "address": "670 S Barrington Rd", + "city": "Streamwood", + "country": "Cook", + "state": "IL", + "zip": "60107", + "phone": "630-289-9458", + "fax": "630-289-9033", + "email": "lucius@winchester.com", + "web": "http://www.luciuswinchester.com", + "followers": 8815 + }, + { + "firstname": "Petra", + "lastname": "Mcnichol", + "company": "Hyacinth Foundation Aids Proj", + "address": "670 S Barrington Rd", + "city": "Streamwood", + "country": "Cook", + "state": "IL", + "zip": "60107", + "phone": "630-289-8190", + "fax": "630-289-8985", + "email": "petra@mcnichol.com", + "web": "http://www.petramcnichol.com", + "followers": 9459 + }, + { + "firstname": "Katina", + "lastname": "Ramano", + "company": "Fuhrmann, Chris C Esq", + "address": "580 Fountain Ave", + "city": "Brooklyn", + "country": "Kings", + "state": "NY", + "zip": "11208", + "phone": "718-272-2553", + "fax": "718-272-8498", + "email": "katina@ramano.com", + "web": "http://www.katinaramano.com", + "followers": 924 + }, + { + "firstname": "Leslie", + "lastname": "Cackowski", + "company": "Re, Matthew R Esq", + "address": "2103 W Main St", + "city": "Farmington", + "country": "San Juan", + "state": "NM", + "zip": "87401", + "phone": "505-325-3933", + "fax": "505-325-9042", + "email": "leslie@cackowski.com", + "web": "http://www.lesliecackowski.com", + "followers": 3028 + }, + { + "firstname": "Cristopher", + "lastname": "Wiget", + "company": "Roche, Patrick Esq", + "address": "4354 Highway 64", + "city": "Kirtland", + "country": "San Juan", + "state": "NM", + "zip": "87417", + "phone": "505-598-9742", + "fax": "505-598-3063", + "email": "cristopher@wiget.com", + "web": "http://www.cristopherwiget.com", + "followers": 2445 + }, + { + "firstname": "Garth", + "lastname": "Skiffington", + "company": "Fox & Killbride", + "address": "22 Mill St", + "city": "Paterson", + "country": "Passaic", + "state": "NJ", + "zip": "07501", + "phone": "973-684-7654", + "fax": "973-684-6309", + "email": "garth@skiffington.com", + "web": "http://www.garthskiffington.com", + "followers": 1725 + }, + { + "firstname": "Brendan", + "lastname": "Qin", + "company": "Allegro Copy & Print", + "address": "305 Griffin Ave Sw", + "city": "Eastman", + "country": "Dodge", + "state": "GA", + "zip": "31023", + "phone": "478-374-5686", + "fax": "478-374-6992", + "email": "brendan@qin.com", + "web": "http://www.brendanqin.com", + "followers": 8035 + }, + { + "firstname": "Chase", + "lastname": "Furler", + "company": "Hostetler & Kowalik", + "address": "3333 Se 21st St", + "city": "Topeka", + "country": "Shawnee", + "state": "KS", + "zip": "66607", + "phone": "785-354-7091", + "fax": "785-354-3042", + "email": "chase@furler.com", + "web": "http://www.chasefurler.com", + "followers": 2977 + }, + { + "firstname": "Marietta", + "lastname": "Bjornberg", + "company": "Consolidated Mechanical Inc", + "address": "1515 Wyoming St", + "city": "Missoula", + "country": "Missoula", + "state": "MT", + "zip": "59801", + "phone": "406-728-0501", + "fax": "406-728-5507", + "email": "marietta@bjornberg.com", + "web": "http://www.mariettabjornberg.com", + "followers": 54 + }, + { + "firstname": "Carmella", + "lastname": "Wishman", + "company": "Meicher Cpa", + "address": "1515 Wyoming St", + "city": "Missoula", + "country": "Missoula", + "state": "MT", + "zip": "59801", + "phone": "406-728-6772", + "fax": "406-728-7668", + "email": "carmella@wishman.com", + "web": "http://www.carmellawishman.com", + "followers": 624 + }, + { + "firstname": "Erica", + "lastname": "Eyrich", + "company": "C & I Computer Services Inc", + "address": "1515 Wyoming St", + "city": "Missoula", + "country": "Missoula", + "state": "MT", + "zip": "59801", + "phone": "406-728-7293", + "fax": "406-728-4789", + "email": "erica@eyrich.com", + "web": "http://www.ericaeyrich.com", + "followers": 8217 + }, + { + "firstname": "Lucius", + "lastname": "Bagnoli", + "company": "American Music Teacher", + "address": "404 W Boonville New Harmony Rd", + "city": "Evansville", + "country": "Vanderburgh", + "state": "IN", + "zip": "47711", + "phone": "812-867-2916", + "fax": "812-867-2593", + "email": "lucius@bagnoli.com", + "web": "http://www.luciusbagnoli.com", + "followers": 8666 + }, + { + "firstname": "Bart", + "lastname": "Hachey", + "company": "Pip Printing", + "address": "490 S Broad St", + "city": "Canfield", + "country": "Mahoning", + "state": "OH", + "zip": "44406", + "phone": "330-533-9769", + "fax": "330-533-6543", + "email": "bart@hachey.com", + "web": "http://www.barthachey.com", + "followers": 8457 + }, + { + "firstname": "Isiah", + "lastname": "Phernetton", + "company": "Wyckoff Florist & Gifts", + "address": "246 Griffing Ave", + "city": "Riverhead", + "country": "Suffolk", + "state": "NY", + "zip": "11901", + "phone": "631-727-0917", + "fax": "631-727-2147", + "email": "isiah@phernetton.com", + "web": "http://www.isiahphernetton.com", + "followers": 6662 + }, + { + "firstname": "Morton", + "lastname": "Crummell", + "company": "Boykin Management Co", + "address": "5485 Conestoga Ct", + "city": "Boulder", + "country": "Boulder", + "state": "CO", + "zip": "80301", + "phone": "303-546-3698", + "fax": "303-546-1589", + "email": "morton@crummell.com", + "web": "http://www.mortoncrummell.com", + "followers": 8143 + }, + { + "firstname": "Prince", + "lastname": "Kauk", + "company": "Mckesson Drug Co", + "address": "2320 W Louise Dr", + "city": "Phoenix", + "country": "Maricopa", + "state": "AZ", + "zip": "85027", + "phone": "623-581-7435", + "fax": "623-581-2472", + "email": "prince@kauk.com", + "web": "http://www.princekauk.com", + "followers": 177 + }, + { + "firstname": "Marta", + "lastname": "Horner", + "company": "Scisci, Pasquale M", + "address": "4694 Alvarado Canyon Rd #-f", + "city": "San Diego", + "country": "San Diego", + "state": "CA", + "zip": "92120", + "phone": "858-265-2270", + "fax": "858-265-6604", + "email": "marta@horner.com", + "web": "http://www.martahorner.com", + "followers": 5749 + }, + { + "firstname": "Teodoro", + "lastname": "Gaboury", + "company": "Bostek, Eva M Dvm", + "address": "4251 Glenwood Ave", + "city": "Youngstown", + "country": "Mahoning", + "state": "OH", + "zip": "44512", + "phone": "330-783-8123", + "fax": "330-783-9674", + "email": "teodoro@gaboury.com", + "web": "http://www.teodorogaboury.com", + "followers": 3663 + }, + { + "firstname": "Jess", + "lastname": "Assad", + "company": "Livingston City", + "address": "9100 F St", + "city": "Omaha", + "country": "Douglas", + "state": "NE", + "zip": "68127", + "phone": "402-331-0470", + "fax": "402-331-4974", + "email": "jess@assad.com", + "web": "http://www.jessassad.com", + "followers": 6985 + }, + { + "firstname": "Freeman", + "lastname": "Soula", + "company": "Henson, Claudia", + "address": "Hwy 8e E", + "city": "Mena", + "country": "Polk", + "state": "AR", + "zip": "71953", + "phone": "479-394-6308", + "fax": "479-394-7509", + "email": "freeman@soula.com", + "web": "http://www.freemansoula.com", + "followers": 7262 + }, + { + "firstname": "Rita", + "lastname": "Center", + "company": "R D Playman Co", + "address": "4013 Cameron St #-b", + "city": "Lafayette", + "country": "Lafayette", + "state": "LA", + "zip": "70506", + "phone": "337-269-8825", + "fax": "337-269-7011", + "email": "rita@center.com", + "web": "http://www.ritacenter.com", + "followers": 4484 + }, + { + "firstname": "Kira", + "lastname": "Papen", + "company": "Tile City & Carpet Of Pa", + "address": "8387 University Ave", + "city": "La Mesa", + "country": "San Diego", + "state": "CA", + "zip": "91941", + "phone": "619-464-3649", + "fax": "619-464-8499", + "email": "kira@papen.com", + "web": "http://www.kirapapen.com", + "followers": 5711 + }, + { + "firstname": "Miquel", + "lastname": "Demicco", + "company": "Welk Resort Center", + "address": "5921 S Middlefield Rd", + "city": "Littleton", + "country": "Jefferson", + "state": "CO", + "zip": "80123", + "phone": "303-730-8080", + "fax": "303-730-8087", + "email": "miquel@demicco.com", + "web": "http://www.miqueldemicco.com", + "followers": 6863 + }, + { + "firstname": "William", + "lastname": "Mahmud", + "company": "Campbell Inn", + "address": "1003 Northern Blvd", + "city": "Manhasset", + "country": "Nassau", + "state": "NY", + "zip": "11030", + "phone": "516-365-3496", + "fax": "516-365-0493", + "email": "william@mahmud.com", + "web": "http://www.williammahmud.com", + "followers": 3591 + }, + { + "firstname": "Lacy", + "lastname": "Belmont", + "company": "House Boat Rentals Inc", + "address": "585 Bedford Rd", + "city": "Bedford Hills", + "country": "Westchester", + "state": "NY", + "zip": "10507", + "phone": "914-241-8888", + "fax": "914-241-2272", + "email": "lacy@belmont.com", + "web": "http://www.lacybelmont.com", + "followers": 1399 + }, + { + "firstname": "Van", + "lastname": "Leanen", + "company": "Mail Boxes Etc", + "address": "Bus Rt 54 & Hh", + "city": "Lake Ozark", + "country": "Camden", + "state": "MO", + "zip": "65049", + "phone": "573-365-0319", + "fax": "573-365-1055", + "email": "van@leanen.com", + "web": "http://www.vanleanen.com", + "followers": 1949 + }, + { + "firstname": "Mayme", + "lastname": "Staub", + "company": "River House Hotel", + "address": "2470 Lamington Rd", + "city": "Bedminster", + "country": "Somerset", + "state": "NJ", + "zip": "07921", + "phone": "908-234-9338", + "fax": "908-234-9433", + "email": "mayme@staub.com", + "web": "http://www.maymestaub.com", + "followers": 2216 + }, + { + "firstname": "Gregg", + "lastname": "Guevarra", + "company": "Arbor Center", + "address": "221 S Kerr Ave", + "city": "Wilmington", + "country": "New Hanover", + "state": "NC", + "zip": "28403", + "phone": "910-799-9811", + "fax": "910-799-1965", + "email": "gregg@guevarra.com", + "web": "http://www.greggguevarra.com", + "followers": 2704 + }, + { + "firstname": "Minh", + "lastname": "Leclare", + "company": "Osach, Ronald C Esq", + "address": "106 S 4th St", + "city": "Forest City", + "country": "Winnebago", + "state": "IA", + "zip": "50436", + "phone": "641-582-0973", + "fax": "641-582-0424", + "email": "minh@leclare.com", + "web": "http://www.minhleclare.com", + "followers": 7681 + }, + { + "firstname": "Joey", + "lastname": "Sedore", + "company": "Goodwill Speciality Co", + "address": "1647 E Palmdale Blvd", + "city": "Palmdale", + "country": "Los Angeles", + "state": "CA", + "zip": "93550", + "phone": "661-273-4188", + "fax": "661-273-6263", + "email": "joey@sedore.com", + "web": "http://www.joeysedore.com", + "followers": 273 + }, + { + "firstname": "Jeanie", + "lastname": "Dalen", + "company": "Ivs Media Inc", + "address": "2900 Ford Rd", + "city": "Bristol", + "country": "Bucks", + "state": "PA", + "zip": "19007", + "phone": "215-788-5062", + "fax": "215-788-7666", + "email": "jeanie@dalen.com", + "web": "http://www.jeaniedalen.com", + "followers": 290 + }, + { + "firstname": "Eddie", + "lastname": "Gauer", + "company": "Easy Mail", + "address": "506 Kellogg Ave", + "city": "Ames", + "country": "Story", + "state": "IA", + "zip": "50010", + "phone": "515-233-2381", + "fax": "515-233-6551", + "email": "eddie@gauer.com", + "web": "http://www.eddiegauer.com", + "followers": 2350 + }, + { + "firstname": "Jessie", + "lastname": "Barkle", + "company": "Days Inn Airport By Mall Amer", + "address": "1002 S Treadaway Blvd", + "city": "Abilene", + "country": "Taylor", + "state": "TX", + "zip": "79602", + "phone": "325-677-1190", + "fax": "325-677-2343", + "email": "jessie@barkle.com", + "web": "http://www.jessiebarkle.com", + "followers": 5427 + }, + { + "firstname": "Deandre", + "lastname": "Resendiz", + "company": "Sav Mart", + "address": "4 Trvl Svc Carlson Trvl Ways", + "city": "Twin Falls", + "country": "Twin Falls", + "state": "ID", + "zip": "83301", + "phone": "208-733-8306", + "fax": "208-733-3476", + "email": "deandre@resendiz.com", + "web": "http://www.deandreresendiz.com", + "followers": 1120 + }, + { + "firstname": "Janet", + "lastname": "Rathrock", + "company": "Ryder, Edward A Esq", + "address": "2181 Harlem Rd", + "city": "Loves Park", + "country": "Winnebago", + "state": "IL", + "zip": "61111", + "phone": "815-877-4376", + "fax": "815-877-9538", + "email": "janet@rathrock.com", + "web": "http://www.janetrathrock.com", + "followers": 2725 + }, + { + "firstname": "Denice", + "lastname": "Nordlinger", + "company": "Bickel, Daniel R Cpa", + "address": "7210 Gateway Blvd E", + "city": "El Paso", + "country": "El Paso", + "state": "TX", + "zip": "79915", + "phone": "915-593-2344", + "fax": "915-593-8069", + "email": "denice@nordlinger.com", + "web": "http://www.denicenordlinger.com", + "followers": 2003 + }, + { + "firstname": "Danny", + "lastname": "Dales", + "company": "Barrett Bindery Co", + "address": "3530 E Washington St", + "city": "Phoenix", + "country": "Maricopa", + "state": "AZ", + "zip": "85034", + "phone": "602-225-9543", + "fax": "602-225-9028", + "email": "danny@dales.com", + "web": "http://www.dannydales.com", + "followers": 2843 + }, + { + "firstname": "Robbie", + "lastname": "Deshay", + "company": "Cornhusker Press", + "address": "1700 Terminal St", + "city": "West Sacramento", + "country": "Yolo", + "state": "CA", + "zip": "95691", + "phone": "916-372-5032", + "fax": "916-372-1333", + "email": "robbie@deshay.com", + "web": "http://www.robbiedeshay.com", + "followers": 3460 + }, + { + "firstname": "Carla", + "lastname": "Humble", + "company": "Express Printing Center", + "address": "11796 Sheldon St", + "city": "Sun Valley", + "country": "Los Angeles", + "state": "CA", + "zip": "91352", + "phone": "818-768-0662", + "fax": "818-768-1832", + "email": "carla@humble.com", + "web": "http://www.carlahumble.com", + "followers": 4639 + }, + { + "firstname": "Ashley", + "lastname": "Leonesio", + "company": "Martinique Resort Hotel", + "address": "15 Park Row", + "city": "New York", + "country": "New York", + "state": "NY", + "zip": "10038", + "phone": "212-227-3681", + "fax": "212-227-4343", + "email": "ashley@leonesio.com", + "web": "http://www.ashleyleonesio.com", + "followers": 4801 + }, + { + "firstname": "Josephine", + "lastname": "Sotlar", + "company": "Shipp Storage", + "address": "400 1st St Nw", + "city": "Washington", + "country": "District of Columbia", + "state": "DC", + "zip": "20001", + "phone": "202-783-2772", + "fax": "202-783-8805", + "email": "josephine@sotlar.com", + "web": "http://www.josephinesotlar.com", + "followers": 515 + }, + { + "firstname": "Derek", + "lastname": "Kreutzbender", + "company": "Recycle Metals Corp", + "address": "411 E Wisconsin Ave", + "city": "Milwaukee", + "country": "Milwaukee", + "state": "WI", + "zip": "53202", + "phone": "414-271-5253", + "fax": "414-271-6234", + "email": "derek@kreutzbender.com", + "web": "http://www.derekkreutzbender.com", + "followers": 2430 + }, + { + "firstname": "Kira", + "lastname": "Staffon", + "company": "International Management Assoc", + "address": "933 Wiliwili St", + "city": "Honolulu", + "country": "Honolulu", + "state": "HI", + "zip": "96826", + "phone": "808-949-0941", + "fax": "808-949-8257", + "email": "kira@staffon.com", + "web": "http://www.kirastaffon.com", + "followers": 5769 + }, + { + "firstname": "Isaac", + "lastname": "Davensizer", + "company": "Dillon Measurement Instruments", + "address": "444 Nahua St", + "city": "Honolulu", + "country": "Honolulu", + "state": "HI", + "zip": "96815", + "phone": "808-544-5794", + "fax": "808-544-6357", + "email": "isaac@davensizer.com", + "web": "http://www.isaacdavensizer.com", + "followers": 3453 + }, + { + "firstname": "Reva", + "lastname": "Bayer", + "company": "Hirt, Stanley Esq", + "address": "4011 Wallingford Ave N", + "city": "Seattle", + "country": "King", + "state": "WA", + "zip": "98103", + "phone": "206-634-9998", + "fax": "206-634-2589", + "email": "reva@bayer.com", + "web": "http://www.revabayer.com", + "followers": 7415 + }, + { + "firstname": "Melvin", + "lastname": "Auteri", + "company": "Interstate Unltd Fed Crdt Un", + "address": "463 Beacon St", + "city": "Boston", + "country": "Suffolk", + "state": "MA", + "zip": "02115", + "phone": "617-247-8022", + "fax": "617-247-6002", + "email": "melvin@auteri.com", + "web": "http://www.melvinauteri.com", + "followers": 2705 + }, + { + "firstname": "Stephen", + "lastname": "Seiters", + "company": "Us Mortgage Corp", + "address": "814 Blue Mound Rd", + "city": "Fort Worth", + "country": "Tarrant", + "state": "TX", + "zip": "76131", + "phone": "817-947-3102", + "fax": "817-947-6272", + "email": "stephen@seiters.com", + "web": "http://www.stephenseiters.com", + "followers": 9568 + }, + { + "firstname": "Lucas", + "lastname": "Santellana", + "company": "Constantino, James P Esq", + "address": "4820 E Mcdowell Rd #-300", + "city": "Phoenix", + "country": "Maricopa", + "state": "AZ", + "zip": "85008", + "phone": "602-225-3469", + "fax": "602-225-8897", + "email": "lucas@santellana.com", + "web": "http://www.lucassantellana.com", + "followers": 8420 + }, + { + "firstname": "Traci", + "lastname": "Toomey", + "company": "Pea Press", + "address": "Box #-1948", + "city": "Jackson", + "country": "Teton", + "state": "WY", + "zip": "83001", + "phone": "307-733-9708", + "fax": "307-733-6525", + "email": "traci@toomey.com", + "web": "http://www.tracitoomey.com", + "followers": 7718 + }, + { + "firstname": "Vernice", + "lastname": "Resendes", + "company": "Sorrento Cheese Co Inc", + "address": "11796 Sheldon St", + "city": "Sun Valley", + "country": "Los Angeles", + "state": "CA", + "zip": "91352", + "phone": "818-768-6234", + "fax": "818-768-7585", + "email": "vernice@resendes.com", + "web": "http://www.verniceresendes.com", + "followers": 912 + }, + { + "firstname": "Hillary", + "lastname": "Holmes", + "company": "Dennis N Brager Law Offices Of", + "address": "7565 Green Valley Rd", + "city": "Placerville", + "country": "El Dorado", + "state": "CA", + "zip": "95667", + "phone": "530-626-1934", + "fax": "530-626-6128", + "email": "hillary@holmes.com", + "web": "http://www.hillaryholmes.com", + "followers": 7918 + }, + { + "firstname": "Robin", + "lastname": "Schartz", + "company": "Fairmount Country Club", + "address": "10175 Joerschke Dr", + "city": "Grass Valley", + "country": "Nevada", + "state": "CA", + "zip": "95945", + "phone": "530-477-9983", + "fax": "530-477-7396", + "email": "robin@schartz.com", + "web": "http://www.robinschartz.com", + "followers": 2169 + }, + { + "firstname": "Sabrina", + "lastname": "Deppert", + "company": "Americold", + "address": "2701 E Thomas Rd #-j", + "city": "Phoenix", + "country": "Maricopa", + "state": "AZ", + "zip": "85016", + "phone": "602-954-4343", + "fax": "602-954-6266", + "email": "sabrina@deppert.com", + "web": "http://www.sabrinadeppert.com", + "followers": 5488 + }, + { + "firstname": "Luciano", + "lastname": "Truiolo", + "company": "Currier Gallery Of Art", + "address": "435 Mira Vista Ter", + "city": "Pasadena", + "country": "Los Angeles", + "state": "CA", + "zip": "91105", + "phone": "626-792-6850", + "fax": "626-792-5166", + "email": "luciano@truiolo.com", + "web": "http://www.lucianotruiolo.com", + "followers": 9047 + }, + { + "firstname": "Ezekiel", + "lastname": "Mildon", + "company": "Ace Pro Pest Cntrl Inc", + "address": "10 Rogers St", + "city": "Cambridge", + "country": "Middlesex", + "state": "MA", + "zip": "02142", + "phone": "617-494-5618", + "fax": "617-494-3365", + "email": "ezekiel@mildon.com", + "web": "http://www.ezekielmildon.com", + "followers": 399 + }, + { + "firstname": "Hanna", + "lastname": "Cinkan", + "company": "Northbrook Flowers", + "address": "1150 Nw 72nd Ave #-333", + "city": "Miami", + "country": "Miami-Dade", + "state": "FL", + "zip": "33126", + "phone": "305-477-7869", + "fax": "305-477-7089", + "email": "hanna@cinkan.com", + "web": "http://www.hannacinkan.com", + "followers": 4636 + }, + { + "firstname": "Kory", + "lastname": "Wooldridge", + "company": "Paper Stock Dealers Inc", + "address": "1525 E 53rd St", + "city": "Chicago", + "country": "Cook", + "state": "IL", + "zip": "60615", + "phone": "312-753-6734", + "fax": "312-753-2693", + "email": "kory@wooldridge.com", + "web": "http://www.korywooldridge.com", + "followers": 4528 + }, + { + "firstname": "Darrel", + "lastname": "Ruffins", + "company": "Brickman, Arthur Cpa", + "address": "2800 4th St N", + "city": "Saint Petersburg", + "country": "Pinellas", + "state": "FL", + "zip": "33704", + "phone": "727-821-8502", + "fax": "727-821-5104", + "email": "darrel@ruffins.com", + "web": "http://www.darrelruffins.com", + "followers": 6468 + }, + { + "firstname": "Miranda", + "lastname": "Hammitt", + "company": "Steindel, Carl R Md", + "address": "964 E Saint Francis St", + "city": "Brownsville", + "country": "Cameron", + "state": "TX", + "zip": "78520", + "phone": "956-541-5918", + "fax": "956-541-9021", + "email": "miranda@hammitt.com", + "web": "http://www.mirandahammitt.com", + "followers": 8847 + }, + { + "firstname": "Sadie", + "lastname": "Rowlett", + "company": "Port City Taxi Inc", + "address": "2659 Webster Ave", + "city": "Bronx", + "country": "Bronx", + "state": "NY", + "zip": "10458", + "phone": "718-365-1753", + "fax": "718-365-5353", + "email": "sadie@rowlett.com", + "web": "http://www.sadierowlett.com", + "followers": 9836 + }, + { + "firstname": "Deanna", + "lastname": "Gerbi", + "company": "Centerville Historical Society", + "address": "264 Broadway", + "city": "Jersey City", + "country": "Hudson", + "state": "NJ", + "zip": "07306", + "phone": "201-433-0391", + "fax": "201-433-3619", + "email": "deanna@gerbi.com", + "web": "http://www.deannagerbi.com", + "followers": 9112 + }, + { + "firstname": "Alfonso", + "lastname": "Griglen", + "company": "Paul D Friedman", + "address": "577 Township Road #-30s", + "city": "Ada", + "country": "Hardin", + "state": "OH", + "zip": "45810", + "phone": "419-634-3513", + "fax": "419-634-5733", + "email": "alfonso@griglen.com", + "web": "http://www.alfonsogriglen.com", + "followers": 7361 + }, + { + "firstname": "Vernon", + "lastname": "Engelman", + "company": "Atlas Metal Cutting Inc", + "address": "321 Watson St", + "city": "Ripon", + "country": "Fond du Lac", + "state": "WI", + "zip": "54971", + "phone": "920-748-1387", + "fax": "920-748-3703", + "email": "vernon@engelman.com", + "web": "http://www.vernonengelman.com", + "followers": 656 + }, + { + "firstname": "Johnnie", + "lastname": "Rheaves", + "company": "Roberts, James A Cpa", + "address": "2910 E La Cresta Ave", + "city": "Anaheim", + "country": "Orange", + "state": "CA", + "zip": "92806", + "phone": "714-632-1291", + "fax": "714-632-7337", + "email": "johnnie@rheaves.com", + "web": "http://www.johnnierheaves.com", + "followers": 2812 + }, + { + "firstname": "Ella", + "lastname": "Pahnke", + "company": "Davis, Randle S Esq", + "address": "2640 Junction Hwy", + "city": "Kerrville", + "country": "Kerr", + "state": "TX", + "zip": "78028", + "phone": "830-367-8513", + "fax": "830-367-9231", + "email": "ella@pahnke.com", + "web": "http://www.ellapahnke.com", + "followers": 4762 + }, + { + "firstname": "Veronica", + "lastname": "Achorn", + "company": "Guy Spradling", + "address": "5201 Hanawalt Dr", + "city": "El Paso", + "country": "El Paso", + "state": "TX", + "zip": "79903", + "phone": "915-772-3217", + "fax": "915-772-2346", + "email": "veronica@achorn.com", + "web": "http://www.veronicaachorn.com", + "followers": 9145 + }, + { + "firstname": "Kasey", + "lastname": "Nguyen", + "company": "Pettine, Paul A Iii", + "address": "5603 Arapahoe Ave", + "city": "Boulder", + "country": "Boulder", + "state": "CO", + "zip": "80303", + "phone": "303-440-3916", + "fax": "303-440-2452", + "email": "kasey@nguyen.com", + "web": "http://www.kaseynguyen.com", + "followers": 2867 + }, + { + "firstname": "Frankie", + "lastname": "Morein", + "company": "Oliver, Jerrold B Esq", + "address": "104 North St", + "city": "Stamford", + "country": "Fairfield", + "state": "CT", + "zip": "06902", + "phone": "203-975-3712", + "fax": "203-975-4688", + "email": "frankie@morein.com", + "web": "http://www.frankiemorein.com", + "followers": 5663 + }, + { + "firstname": "Elaine", + "lastname": "Renzi", + "company": "Delvel Chem Co", + "address": "221 E 59th St", + "city": "New York", + "country": "New York", + "state": "NY", + "zip": "10022", + "phone": "212-826-7966", + "fax": "212-826-2043", + "email": "elaine@renzi.com", + "web": "http://www.elainerenzi.com", + "followers": 9525 + }, + { + "firstname": "Timothy", + "lastname": "Janski", + "company": "Snyder Chevrolet Olds Geo Co", + "address": "800 E Dimond Blvd", + "city": "Anchorage", + "country": "Anchorage", + "state": "AK", + "zip": "99515", + "phone": "907-344-4330", + "fax": "907-344-4086", + "email": "timothy@janski.com", + "web": "http://www.timothyjanski.com", + "followers": 1000 + }, + { + "firstname": "Warren", + "lastname": "Hacher", + "company": "Josel, Stephen C Esq", + "address": "4600 S 1st St", + "city": "Abilene", + "country": "Taylor", + "state": "TX", + "zip": "79605", + "phone": "325-691-7220", + "fax": "325-691-7394", + "email": "warren@hacher.com", + "web": "http://www.warrenhacher.com", + "followers": 6287 + }, + { + "firstname": "Brant", + "lastname": "Darnel", + "company": "Cody, Daniel S Esq", + "address": "8250 Tyler Blvd", + "city": "Mentor", + "country": "Lake", + "state": "OH", + "zip": "44060", + "phone": "440-974-8416", + "fax": "440-974-7476", + "email": "brant@darnel.com", + "web": "http://www.brantdarnel.com", + "followers": 5217 + }, + { + "firstname": "Mara", + "lastname": "Rineheart", + "company": "Berry Naturipe Growers", + "address": "39 W 21st St", + "city": "Northampton", + "country": "Northampton", + "state": "PA", + "zip": "18067", + "phone": "610-262-2444", + "fax": "610-262-6836", + "email": "mara@rineheart.com", + "web": "http://www.mararineheart.com", + "followers": 9213 + }, + { + "firstname": "Karen", + "lastname": "Flierl", + "company": "Cook Vetter Doerhoff", + "address": "501 N I #-h35", + "city": "Austin", + "country": "Travis", + "state": "TX", + "zip": "78702", + "phone": "512-477-1826", + "fax": "512-477-1407", + "email": "karen@flierl.com", + "web": "http://www.karenflierl.com", + "followers": 754 + }, + { + "firstname": "Virgil", + "lastname": "Chinni", + "company": "Dorfman Abrams Music & Co", + "address": "248 Libby St", + "city": "Honolulu", + "country": "Honolulu", + "state": "HI", + "zip": "96819", + "phone": "808-841-9811", + "fax": "808-841-9646", + "email": "virgil@chinni.com", + "web": "http://www.virgilchinni.com", + "followers": 6740 + }, + { + "firstname": "Jimmie", + "lastname": "Kertzman", + "company": "Oregon Pacific Trading Co", + "address": "279 Puuhale Rd", + "city": "Honolulu", + "country": "Honolulu", + "state": "HI", + "zip": "96819", + "phone": "808-841-2883", + "fax": "808-841-1772", + "email": "jimmie@kertzman.com", + "web": "http://www.jimmiekertzman.com", + "followers": 4795 + }, + { + "firstname": "Leif", + "lastname": "Bachta", + "company": "Hislop, Lorna Brumfield Esq", + "address": "91246 Oihana St", + "city": "Kapolei", + "country": "Honolulu", + "state": "HI", + "zip": "96707", + "phone": "808-682-8942", + "fax": "808-682-2789", + "email": "leif@bachta.com", + "web": "http://www.leifbachta.com", + "followers": 6016 + }, + { + "firstname": "Ione", + "lastname": "Kucera", + "company": "Tweedy Penney & Crawford", + "address": "94210 Pupukahi St #-201a", + "city": "Waipahu", + "country": "Honolulu", + "state": "HI", + "zip": "96797", + "phone": "808-671-5253", + "fax": "808-671-3048", + "email": "ione@kucera.com", + "web": "http://www.ionekucera.com", + "followers": 17 + }, + { + "firstname": "Doreen", + "lastname": "Sakurai", + "company": "Airlifter", + "address": "211 E 50th St", + "city": "New York", + "country": "New York", + "state": "NY", + "zip": "10022", + "phone": "212-759-4757", + "fax": "212-759-7548", + "email": "doreen@sakurai.com", + "web": "http://www.doreensakurai.com", + "followers": 8051 + }, + { + "firstname": "Joel", + "lastname": "Nardo", + "company": "New Era Canning Co", + "address": "5150 Town Center Cir", + "city": "Boca Raton", + "country": "Palm Beach", + "state": "FL", + "zip": "33486", + "phone": "561-395-2277", + "fax": "561-395-7825", + "email": "joel@nardo.com", + "web": "http://www.joelnardo.com", + "followers": 9041 + }, + { + "firstname": "Neil", + "lastname": "Backus", + "company": "Smith Capital Management", + "address": "521 5th Ave", + "city": "New York", + "country": "New York", + "state": "NY", + "zip": "10175", + "phone": "212-537-4955", + "fax": "212-537-1181", + "email": "neil@backus.com", + "web": "http://www.neilbackus.com", + "followers": 9529 + }, + { + "firstname": "Fausto", + "lastname": "Marks", + "company": "Donohue, Brian C Esq", + "address": "200 Stuart St", + "city": "Boston", + "country": "Suffolk", + "state": "MA", + "zip": "02116", + "phone": "617-451-9353", + "fax": "617-451-2136", + "email": "fausto@marks.com", + "web": "http://www.faustomarks.com", + "followers": 9763 + }, + { + "firstname": "Christa", + "lastname": "Bodenschatz", + "company": "Stationers Inc", + "address": "Tilton Rd", + "city": "Danville", + "country": "Vermilion", + "state": "IL", + "zip": "61832", + "phone": "217-443-6280", + "fax": "217-443-6382", + "email": "christa@bodenschatz.com", + "web": "http://www.christabodenschatz.com", + "followers": 1744 + }, + { + "firstname": "Chi", + "lastname": "Greenlaw", + "company": "E & T Screw Machine Products", + "address": "4300 N Miller Rd #-143", + "city": "Scottsdale", + "country": "Maricopa", + "state": "AZ", + "zip": "85251", + "phone": "480-946-1537", + "fax": "480-946-1657", + "email": "chi@greenlaw.com", + "web": "http://www.chigreenlaw.com", + "followers": 2707 + }, + { + "firstname": "Kyle", + "lastname": "Ferri", + "company": "Ames Plumbing & Heating", + "address": "1801 E 5th Ave", + "city": "Anchorage", + "country": "Anchorage", + "state": "AK", + "zip": "99501", + "phone": "907-272-2216", + "fax": "907-272-7109", + "email": "kyle@ferri.com", + "web": "http://www.kyleferri.com", + "followers": 7533 + }, + { + "firstname": "Freida", + "lastname": "Michelfelder", + "company": "Fun Discovery Inc", + "address": "117 Martin Luther King Jr Dr S", + "city": "Atlanta", + "country": "Fulton", + "state": "GA", + "zip": "30303", + "phone": "404-521-3372", + "fax": "404-521-3223", + "email": "freida@michelfelder.com", + "web": "http://www.freidamichelfelder.com", + "followers": 4298 + }, + { + "firstname": "Bryant", + "lastname": "Bouliouris", + "company": "Medlin, Charles K Jr", + "address": "480 W Pearl Ave", + "city": "Jackson", + "country": "Teton", + "state": "WY", + "zip": "83001", + "phone": "307-733-8286", + "fax": "307-733-6041", + "email": "bryant@bouliouris.com", + "web": "http://www.bryantbouliouris.com", + "followers": 9520 + }, + { + "firstname": "Emilia", + "lastname": "Oxley", + "company": "Buckeye Reserve Title", + "address": "14651 Dallas Pky", + "city": "Dallas", + "country": "Dallas", + "state": "TX", + "zip": "75240", + "phone": "214-702-8125", + "fax": "214-702-4766", + "email": "emilia@oxley.com", + "web": "http://www.emiliaoxley.com", + "followers": 6873 + }, + { + "firstname": "Naomi", + "lastname": "Mcraven", + "company": "Oak Brook Capital Corp", + "address": "13456 Se 27th Pl", + "city": "Bellevue", + "country": "King", + "state": "WA", + "zip": "98005", + "phone": "425-641-5463", + "fax": "425-641-5923", + "email": "naomi@mcraven.com", + "web": "http://www.naomimcraven.com", + "followers": 7029 + }, + { + "firstname": "Dionne", + "lastname": "Borycz", + "company": "Pepsi Cola Dr Pepper Bottling", + "address": "77 S Washington St #-207", + "city": "Rockville", + "country": "Montgomery", + "state": "MD", + "zip": "20850", + "phone": "301-294-0154", + "fax": "301-294-7523", + "email": "dionne@borycz.com", + "web": "http://www.dionneborycz.com", + "followers": 6973 + }, + { + "firstname": "Jimmy", + "lastname": "Hrobsky", + "company": "Howard Johnson", + "address": "8253 Ronson Rd", + "city": "San Diego", + "country": "San Diego", + "state": "CA", + "zip": "92111", + "phone": "858-268-4663", + "fax": "858-268-4964", + "email": "jimmy@hrobsky.com", + "web": "http://www.jimmyhrobsky.com", + "followers": 544 + }, + { + "firstname": "Peggy", + "lastname": "Hohlstein", + "company": "Steritek Inc", + "address": "Rt 20", + "city": "Westfield", + "country": "Hampden", + "state": "MA", + "zip": "01085", + "phone": "413-543-2933", + "fax": "413-543-3805", + "email": "peggy@hohlstein.com", + "web": "http://www.peggyhohlstein.com", + "followers": 8885 + }, + { + "firstname": "Genevieve", + "lastname": "Kekiwi", + "company": "Lawson, John F Esq", + "address": "8300 Bell Ter", + "city": "Newburgh", + "country": "Warrick", + "state": "IN", + "zip": "47630", + "phone": "812-477-3620", + "fax": "812-477-3646", + "email": "genevieve@kekiwi.com", + "web": "http://www.genevievekekiwi.com", + "followers": 8134 + }, + { + "firstname": "Terra", + "lastname": "Plagge", + "company": "Beach, Jeffrey E", + "address": "60 Minute Photo Colormax", + "city": "Evansville", + "country": "Vanderburgh", + "state": "IN", + "zip": "47715", + "phone": "812-477-9524", + "fax": "812-477-9617", + "email": "terra@plagge.com", + "web": "http://www.terraplagge.com", + "followers": 4323 + }, + { + "firstname": "Allie", + "lastname": "Pumphrey", + "company": "Asher, Ronald L Md", + "address": "501 N Weinbach Ave", + "city": "Evansville", + "country": "Vanderburgh", + "state": "IN", + "zip": "47711", + "phone": "812-477-0753", + "fax": "812-477-4604", + "email": "allie@pumphrey.com", + "web": "http://www.alliepumphrey.com", + "followers": 3985 + }, + { + "firstname": "Katina", + "lastname": "Survant", + "company": "Kgtv Channel 10", + "address": "590 N 2nd E", + "city": "Mountain Home", + "country": "Elmore", + "state": "ID", + "zip": "83647", + "phone": "208-587-3734", + "fax": "208-587-5574", + "email": "katina@survant.com", + "web": "http://www.katinasurvant.com", + "followers": 3440 + }, + { + "firstname": "Marta", + "lastname": "Warran", + "company": "Wirth, John T Esq", + "address": "2929 W Kennewick Ave", + "city": "Kennewick", + "country": "Benton", + "state": "WA", + "zip": "99336", + "phone": "509-735-8388", + "fax": "509-735-9193", + "email": "marta@warran.com", + "web": "http://www.martawarran.com", + "followers": 9891 + }, + { + "firstname": "Rebekah", + "lastname": "Lindboe", + "company": "Granite Corporation", + "address": "600 Las Colinas Blvd E", + "city": "Irving", + "country": "Dallas", + "state": "TX", + "zip": "75039", + "phone": "972-556-1121", + "fax": "972-556-0801", + "email": "rebekah@lindboe.com", + "web": "http://www.rebekahlindboe.com", + "followers": 180 + }, + { + "firstname": "Roxie", + "lastname": "Varenhorst", + "company": "Good Neighbor Real Estate", + "address": "1301 Dublin Rd", + "city": "Columbus", + "country": "Franklin", + "state": "OH", + "zip": "43215", + "phone": "614-487-2917", + "fax": "614-487-4227", + "email": "roxie@varenhorst.com", + "web": "http://www.roxievarenhorst.com", + "followers": 1352 + }, + { + "firstname": "Kennith", + "lastname": "Peto", + "company": "Kirschbaum, Thomas A Esq", + "address": "2080 Peachtree Industrial Ct", + "city": "Atlanta", + "country": "Dekalb", + "state": "GA", + "zip": "30341", + "phone": "770-455-4277", + "fax": "770-455-6746", + "email": "kennith@peto.com", + "web": "http://www.kennithpeto.com", + "followers": 8164 + }, + { + "firstname": "Darrell", + "lastname": "Amrich", + "company": "Harris, James P Iii", + "address": "64 W Convenient", + "city": "Apex", + "country": "Wake", + "state": "NC", + "zip": "27502", + "phone": "919-362-8201", + "fax": "919-362-7475", + "email": "darrell@amrich.com", + "web": "http://www.darrellamrich.com", + "followers": 9098 + }, + { + "firstname": "Savannah", + "lastname": "Loffier", + "company": "Saint Charles Catv", + "address": "501 S Johnstone Ave", + "city": "Bartlesville", + "country": "Washington", + "state": "OK", + "zip": "74003", + "phone": "918-337-3201", + "fax": "918-337-4947", + "email": "savannah@loffier.com", + "web": "http://www.savannahloffier.com", + "followers": 7227 + }, + { + "firstname": "Martin", + "lastname": "Carley", + "company": "Heil, John P Esq", + "address": "680 Country W", + "city": "Sylva", + "country": "Jackson", + "state": "NC", + "zip": "28779", + "phone": "828-586-3914", + "fax": "828-586-8059", + "email": "martin@carley.com", + "web": "http://www.martincarley.com", + "followers": 7412 + }, + { + "firstname": "Lacy", + "lastname": "Hyten", + "company": "Buy & Sell Press", + "address": "1 Palmer Sq", + "city": "Princeton", + "country": "Mercer", + "state": "NJ", + "zip": "08542", + "phone": "609-683-3558", + "fax": "609-683-0649", + "email": "lacy@hyten.com", + "web": "http://www.lacyhyten.com", + "followers": 2184 + }, + { + "firstname": "Forest", + "lastname": "Orea", + "company": "Clark, Francis J", + "address": "6858 S Ashland Ave", + "city": "Chicago", + "country": "Cook", + "state": "IL", + "zip": "60636", + "phone": "773-436-4531", + "fax": "773-436-2636", + "email": "forest@orea.com", + "web": "http://www.forestorea.com", + "followers": 8308 + }, + { + "firstname": "Courtney", + "lastname": "Shishido", + "company": "Beymers Jewelry", + "address": "145 W 6th Ave", + "city": "Anchorage", + "country": "Anchorage", + "state": "AK", + "zip": "99501", + "phone": "907-279-2737", + "fax": "907-279-2025", + "email": "courtney@shishido.com", + "web": "http://www.courtneyshishido.com", + "followers": 6286 + }, + { + "firstname": "Annette", + "lastname": "Frietas", + "company": "Monsanto Chemical Company", + "address": "45 W 46th St", + "city": "New York", + "country": "New York", + "state": "NY", + "zip": "10036", + "phone": "212-944-8670", + "fax": "212-944-9464", + "email": "annette@frietas.com", + "web": "http://www.annettefrietas.com", + "followers": 9185 + }, + { + "firstname": "Karyn", + "lastname": "Jinks", + "company": "Maslen, David Esq", + "address": "2318 N Galloway Ave", + "city": "Mesquite", + "country": "Dallas", + "state": "TX", + "zip": "75150", + "phone": "972-289-4090", + "fax": "972-289-3319", + "email": "karyn@jinks.com", + "web": "http://www.karynjinks.com", + "followers": 3549 + }, + { + "firstname": "Edwin", + "lastname": "Lavelli", + "company": "Letterguide Co", + "address": "W 1st St", + "city": "East Liverpool", + "country": "Columbiana", + "state": "OH", + "zip": "43920", + "phone": "330-385-4581", + "fax": "330-385-9959", + "email": "edwin@lavelli.com", + "web": "http://www.edwinlavelli.com", + "followers": 1645 + }, + { + "firstname": "Jimmie", + "lastname": "Barninger", + "company": "California Paint & Wlpaper Str", + "address": "Box #-4038", + "city": "Modesto", + "country": "Stanislaus", + "state": "CA", + "zip": "95352", + "phone": "209-525-7568", + "fax": "209-525-4389", + "email": "jimmie@barninger.com", + "web": "http://www.jimmiebarninger.com", + "followers": 3947 + }, + { + "firstname": "Merle", + "lastname": "Wyrosdick", + "company": "Keil, James J Esq", + "address": "1350 Campus Pky", + "city": "Neptune", + "country": "Monmouth", + "state": "NJ", + "zip": "07753", + "phone": "732-938-7301", + "fax": "732-938-7237", + "email": "merle@wyrosdick.com", + "web": "http://www.merlewyrosdick.com", + "followers": 5762 + }, + { + "firstname": "Amelia", + "lastname": "Caputo", + "company": "Security Marketing Agency", + "address": "1800 Airport Way", + "city": "Fairbanks", + "country": "Fairbanks North Star", + "state": "AK", + "zip": "99701", + "phone": "907-456-1748", + "fax": "907-456-7535", + "email": "amelia@caputo.com", + "web": "http://www.ameliacaputo.com", + "followers": 9583 + }, + { + "firstname": "Germaine", + "lastname": "Bruski", + "company": "Alloy Founders", + "address": "2301 S Cushman St", + "city": "Fairbanks", + "country": "Fairbanks North Star", + "state": "AK", + "zip": "99701", + "phone": "907-456-8225", + "fax": "907-456-9261", + "email": "germaine@bruski.com", + "web": "http://www.germainebruski.com", + "followers": 5075 + }, + { + "firstname": "Willa", + "lastname": "Dutt", + "company": "Gutmann Leather Co Inc", + "address": "2110 Peger Rd", + "city": "Fairbanks", + "country": "Fairbanks North Star", + "state": "AK", + "zip": "99709", + "phone": "907-456-2885", + "fax": "907-456-2187", + "email": "willa@dutt.com", + "web": "http://www.willadutt.com", + "followers": 2775 + }, + { + "firstname": "Cherie", + "lastname": "Fuhri", + "company": "Continental Baking Co", + "address": "3679 College Rd", + "city": "Fairbanks", + "country": "Fairbanks North Star", + "state": "AK", + "zip": "99709", + "phone": "907-456-9072", + "fax": "907-456-8467", + "email": "cherie@fuhri.com", + "web": "http://www.cheriefuhri.com", + "followers": 5839 + }, + { + "firstname": "Tyron", + "lastname": "Quillman", + "company": "Analysts International Corp", + "address": "5300 Shawnee Rd", + "city": "Alexandria", + "country": "Fairfax", + "state": "VA", + "zip": "22312", + "phone": "703-354-9266", + "fax": "703-354-2554", + "email": "tyron@quillman.com", + "web": "http://www.tyronquillman.com", + "followers": 9439 + }, + { + "firstname": "Charity", + "lastname": "Dyckman", + "company": "Marriott, Frank Jr", + "address": "6927 Old Seward Hwy", + "city": "Anchorage", + "country": "Anchorage", + "state": "AK", + "zip": "99518", + "phone": "907-349-9880", + "fax": "907-349-4449", + "email": "charity@dyckman.com", + "web": "http://www.charitydyckman.com", + "followers": 2058 + }, + { + "firstname": "Nanette", + "lastname": "Turansky", + "company": "Sheraton Society Hill Hotel", + "address": "52 S 2nd St", + "city": "Easton", + "country": "Northampton", + "state": "PA", + "zip": "18042", + "phone": "610-250-6188", + "fax": "610-250-4334", + "email": "nanette@turansky.com", + "web": "http://www.nanetteturansky.com", + "followers": 5905 + }, + { + "firstname": "Cherie", + "lastname": "Schronce", + "company": "Varda, John Duncan Esq", + "address": "21603 Devonshire St", + "city": "Chatsworth", + "country": "Los Angeles", + "state": "CA", + "zip": "91311", + "phone": "818-718-2001", + "fax": "818-718-7339", + "email": "cherie@schronce.com", + "web": "http://www.cherieschronce.com", + "followers": 9409 + }, + { + "firstname": "Theron", + "lastname": "Hambright", + "company": "Sensor Oil And Gas Inc", + "address": "905 Brooks Ave", + "city": "Holland", + "country": "Ottawa", + "state": "MI", + "zip": "49423", + "phone": "616-392-2074", + "fax": "616-392-0226", + "email": "theron@hambright.com", + "web": "http://www.theronhambright.com", + "followers": 6532 + }, + { + "firstname": "Laurie", + "lastname": "Bibbs", + "company": "Action Nursing Care Llc", + "address": "2101 Claremont Ave Ne", + "city": "Albuquerque", + "country": "Bernalillo", + "state": "NM", + "zip": "87107", + "phone": "505-881-2899", + "fax": "505-881-3771", + "email": "laurie@bibbs.com", + "web": "http://www.lauriebibbs.com", + "followers": 5422 + }, + { + "firstname": "Angelo", + "lastname": "Ferentz", + "company": "Reagan, William L Esq", + "address": "3220 E 26th St", + "city": "Los Angeles", + "country": "Los Angeles", + "state": "CA", + "zip": "90023", + "phone": "323-262-5047", + "fax": "323-262-8693", + "email": "angelo@ferentz.com", + "web": "http://www.angeloferentz.com", + "followers": 6580 + }, + { + "firstname": "Denver", + "lastname": "Topete", + "company": "Insight Cablevision", + "address": "5770 Morehouse Dr", + "city": "San Diego", + "country": "San Diego", + "state": "CA", + "zip": "92121", + "phone": "858-457-3538", + "fax": "858-457-0465", + "email": "denver@topete.com", + "web": "http://www.denvertopete.com", + "followers": 6542 + }, + { + "firstname": "Tommie", + "lastname": "Reuland", + "company": "Schaff, Michael D Esq", + "address": "1166 Arroyo St", + "city": "San Fernando", + "country": "Los Angeles", + "state": "CA", + "zip": "91340", + "phone": "818-361-4035", + "fax": "818-361-7493", + "email": "tommie@reuland.com", + "web": "http://www.tommiereuland.com", + "followers": 7735 + }, + { + "firstname": "Delmer", + "lastname": "Delucas", + "company": "American Processing Co Inc", + "address": "2770 Walden Ave", + "city": "Buffalo", + "country": "Erie", + "state": "NY", + "zip": "14225", + "phone": "716-874-1439", + "fax": "716-874-3467", + "email": "delmer@delucas.com", + "web": "http://www.delmerdelucas.com", + "followers": 8605 + }, + { + "firstname": "Latisha", + "lastname": "Bahls", + "company": "Search South Inc", + "address": "3 E 4th St", + "city": "Cincinnati", + "country": "Hamilton", + "state": "OH", + "zip": "45202", + "phone": "513-784-5007", + "fax": "513-784-5275", + "email": "latisha@bahls.com", + "web": "http://www.latishabahls.com", + "followers": 8504 + }, + { + "firstname": "Simone", + "lastname": "Lundie", + "company": "Casebolt, Victor S Esq", + "address": "701 S 17th St", + "city": "Philadelphia", + "country": "Philadelphia", + "state": "PA", + "zip": "19146", + "phone": "215-732-9026", + "fax": "215-732-8257", + "email": "simone@lundie.com", + "web": "http://www.simonelundie.com", + "followers": 2165 + }, + { + "firstname": "Ross", + "lastname": "Spurger", + "company": "Hoover Group Inc", + "address": "710 S Illinois Ave", + "city": "Carbondale", + "country": "Jackson", + "state": "IL", + "zip": "62901", + "phone": "618-453-9968", + "fax": "618-453-6144", + "email": "ross@spurger.com", + "web": "http://www.rossspurger.com", + "followers": 361 + }, + { + "firstname": "Abel", + "lastname": "Tuter", + "company": "Wernsing Plumbing & Heating", + "address": "2457 Perkiomen Ave", + "city": "Reading", + "country": "Berks", + "state": "PA", + "zip": "19606", + "phone": "610-370-6549", + "fax": "610-370-0856", + "email": "abel@tuter.com", + "web": "http://www.abeltuter.com", + "followers": 6215 + }, + { + "firstname": "Beverley", + "lastname": "Bunche", + "company": "Nurses Organization Vets Affrs", + "address": "1727 Nw 79th Ave", + "city": "Miami", + "country": "Miami-Dade", + "state": "FL", + "zip": "33126", + "phone": "305-591-4141", + "fax": "305-591-7751", + "email": "beverley@bunche.com", + "web": "http://www.beverleybunche.com", + "followers": 8121 + }, + { + "firstname": "Lizzie", + "lastname": "Torregrossa", + "company": "Salerno & Son", + "address": "78 Faunce Corner Rd", + "city": "North Dartmouth", + "country": "Bristol", + "state": "MA", + "zip": "02747", + "phone": "508-997-1409", + "fax": "508-997-9846", + "email": "lizzie@torregrossa.com", + "web": "http://www.lizzietorregrossa.com", + "followers": 1134 + }, + { + "firstname": "Tia", + "lastname": "Neumaier", + "company": "Carterville Mini Storage", + "address": "2500 Maitland Center Pky", + "city": "Maitland", + "country": "Orange", + "state": "FL", + "zip": "32751", + "phone": "407-660-7426", + "fax": "407-660-7628", + "email": "tia@neumaier.com", + "web": "http://www.tianeumaier.com", + "followers": 3010 + }, + { + "firstname": "Lesa", + "lastname": "Chantry", + "company": "Lutz Cichy Selig & Zeronda", + "address": "1119 N Bodine St", + "city": "Philadelphia", + "country": "Philadelphia", + "state": "PA", + "zip": "19123", + "phone": "215-923-0136", + "fax": "215-923-9492", + "email": "lesa@chantry.com", + "web": "http://www.lesachantry.com", + "followers": 5201 + }, + { + "firstname": "Marcelo", + "lastname": "Arostegui", + "company": "Moraschs Quality Meats", + "address": "76 Mall Comp", + "city": "Branson", + "country": "Taney", + "state": "MO", + "zip": "65616", + "phone": "417-336-9702", + "fax": "417-336-2664", + "email": "marcelo@arostegui.com", + "web": "http://www.marceloarostegui.com", + "followers": 1195 + }, + { + "firstname": "Jimmie", + "lastname": "Hardgrove", + "company": "Prosthodontic Associates", + "address": "305 E 47th St", + "city": "New York", + "country": "New York", + "state": "NY", + "zip": "10017", + "phone": "212-980-0445", + "fax": "212-980-6914", + "email": "jimmie@hardgrove.com", + "web": "http://www.jimmiehardgrove.com", + "followers": 1002 + }, + { + "firstname": "Renae", + "lastname": "Eldrige", + "company": "Pexco Packaging Corp", + "address": "1716 Rt 77", + "city": "Attica", + "country": "Wyoming", + "state": "NY", + "zip": "14011", + "phone": "585-591-3118", + "fax": "585-591-9104", + "email": "renae@eldrige.com", + "web": "http://www.renaeeldrige.com", + "followers": 4105 + }, + { + "firstname": "Tisha", + "lastname": "Gorder", + "company": "Paroly Rampart Sec Systems", + "address": "77 W Huron St", + "city": "Chicago", + "country": "Cook", + "state": "IL", + "zip": "60610", + "phone": "312-642-2897", + "fax": "312-642-2664", + "email": "tisha@gorder.com", + "web": "http://www.tishagorder.com", + "followers": 3305 + }, + { + "firstname": "Clarice", + "lastname": "Knower", + "company": "Yaffa, Andrew B Esq", + "address": "210 W 79th St", + "city": "Chicago", + "country": "Cook", + "state": "IL", + "zip": "60620", + "phone": "773-846-1489", + "fax": "773-846-1462", + "email": "clarice@knower.com", + "web": "http://www.clariceknower.com", + "followers": 5497 + }, + { + "firstname": "Sybil", + "lastname": "Marmerchant", + "company": "Blvd Distillers & Importers", + "address": "12 E 7th Ave", + "city": "York", + "country": "York", + "state": "PA", + "zip": "17404", + "phone": "717-845-4718", + "fax": "717-845-4736", + "email": "sybil@marmerchant.com", + "web": "http://www.sybilmarmerchant.com", + "followers": 4656 + }, + { + "firstname": "Floyd", + "lastname": "Veazey", + "company": "Ramada Inn San Fran Arprt N", + "address": "2877 E Florence Ave", + "city": "Huntington Park", + "country": "Los Angeles", + "state": "CA", + "zip": "90255", + "phone": "323-862-9133", + "fax": "323-862-5589", + "email": "floyd@veazey.com", + "web": "http://www.floydveazey.com", + "followers": 4208 + }, + { + "firstname": "Reyna", + "lastname": "Bangle", + "company": "C & R Contractors Inc", + "address": "85 Long Island Expy", + "city": "New Hyde Park", + "country": "Nassau", + "state": "NY", + "zip": "11040", + "phone": "516-627-8715", + "fax": "516-627-9033", + "email": "reyna@bangle.com", + "web": "http://www.reynabangle.com", + "followers": 9261 + }, + { + "firstname": "Owen", + "lastname": "Sparacino", + "company": "Murtha, Thomas D Esq", + "address": "2865 Poplar Ave", + "city": "Memphis", + "country": "Shelby", + "state": "TN", + "zip": "38111", + "phone": "901-324-9274", + "fax": "901-324-4381", + "email": "owen@sparacino.com", + "web": "http://www.owensparacino.com", + "followers": 154 + }, + { + "firstname": "Eli", + "lastname": "Bettner", + "company": "Shea, David J Esq", + "address": "825 W Main Ave", + "city": "Brewster", + "country": "Okanogan", + "state": "WA", + "zip": "98812", + "phone": "509-689-7964", + "fax": "509-689-1394", + "email": "eli@bettner.com", + "web": "http://www.elibettner.com", + "followers": 9176 + }, + { + "firstname": "Taylor", + "lastname": "Fogerty", + "company": "Khoury Factory Outlet", + "address": "2000 W 120th Ave", + "city": "Denver", + "country": "Adams", + "state": "CO", + "zip": "80234", + "phone": "303-465-0070", + "fax": "303-465-2109", + "email": "taylor@fogerty.com", + "web": "http://www.taylorfogerty.com", + "followers": 2464 + }, + { + "firstname": "Reva", + "lastname": "Lecates", + "company": "First American Rlty Assoc Inc", + "address": "829 S 14th St", + "city": "Fernandina Beach", + "country": "Nassau", + "state": "FL", + "zip": "32034", + "phone": "904-261-0604", + "fax": "904-261-2123", + "email": "reva@lecates.com", + "web": "http://www.revalecates.com", + "followers": 8963 + }, + { + "firstname": "Rodrigo", + "lastname": "Wildrick", + "company": "Midwest Wrecking Company Inc", + "address": "1201 34th St N", + "city": "Saint Petersburg", + "country": "Pinellas", + "state": "FL", + "zip": "33713", + "phone": "727-323-5060", + "fax": "727-323-5982", + "email": "rodrigo@wildrick.com", + "web": "http://www.rodrigowildrick.com", + "followers": 1406 + }, + { + "firstname": "George", + "lastname": "Tukis", + "company": "Andow Personnel Services", + "address": "8 Inn Of Americus", + "city": "Americus", + "country": "Sumter", + "state": "GA", + "zip": "31709", + "phone": "229-924-0263", + "fax": "229-924-4251", + "email": "george@tukis.com", + "web": "http://www.georgetukis.com", + "followers": 5243 + }, + { + "firstname": "Titus", + "lastname": "Rodreguez", + "company": "Vasquez & Co", + "address": "7677 Engineer Rd", + "city": "San Diego", + "country": "San Diego", + "state": "CA", + "zip": "92111", + "phone": "858-571-0819", + "fax": "858-571-9047", + "email": "titus@rodreguez.com", + "web": "http://www.titusrodreguez.com", + "followers": 9258 + }, + { + "firstname": "Emilio", + "lastname": "Lampkin", + "company": "Hendricks, Kenneth J Cpa", + "address": "834 Lois Dr", + "city": "Williamstown", + "country": "Gloucester", + "state": "NJ", + "zip": "08094", + "phone": "856-629-8933", + "fax": "856-629-3337", + "email": "emilio@lampkin.com", + "web": "http://www.emiliolampkin.com", + "followers": 5810 + }, + { + "firstname": "Maryjane", + "lastname": "Arata", + "company": "Larson, John R Esq", + "address": "342 Wolverine Way", + "city": "Sparks", + "country": "Washoe", + "state": "NV", + "zip": "89431", + "phone": "775-352-5822", + "fax": "775-352-1557", + "email": "maryjane@arata.com", + "web": "http://www.maryjanearata.com", + "followers": 5044 + }, + { + "firstname": "Marcie", + "lastname": "Shulz", + "company": "United Printers Inc", + "address": "Blanco Rd", + "city": "San Antonio", + "country": "Bexar", + "state": "TX", + "zip": "78216", + "phone": "210-524-6711", + "fax": "210-524-1693", + "email": "marcie@shulz.com", + "web": "http://www.marcieshulz.com", + "followers": 4807 + }, + { + "firstname": "Celia", + "lastname": "Slavin", + "company": "Acra Aerospace Inc", + "address": "8750 W Bryn Mawr Ave", + "city": "Chicago", + "country": "Cook", + "state": "IL", + "zip": "60631", + "phone": "773-256-3550", + "fax": "773-256-2162", + "email": "celia@slavin.com", + "web": "http://www.celiaslavin.com", + "followers": 3493 + }, + { + "firstname": "Suzette", + "lastname": "Devaughan", + "company": "Anchor Graphics Inc", + "address": "385 Prospect Ave", + "city": "Hackensack", + "country": "Bergen", + "state": "NJ", + "zip": "07601", + "phone": "201-342-8964", + "fax": "201-342-9862", + "email": "suzette@devaughan.com", + "web": "http://www.suzettedevaughan.com", + "followers": 6410 + }, + { + "firstname": "Christian", + "lastname": "Marnell", + "company": "Wenick, George D Esq", + "address": "2750 Springboro Rd", + "city": "Dayton", + "country": "Montgomery", + "state": "OH", + "zip": "45439", + "phone": "937-293-9728", + "fax": "937-293-6782", + "email": "christian@marnell.com", + "web": "http://www.christianmarnell.com", + "followers": 3071 + }, + { + "firstname": "Misty", + "lastname": "Ericksen", + "company": "Graham & Associates Inc", + "address": "1808 2nd", + "city": "Cheney", + "country": "Spokane", + "state": "WA", + "zip": "99004", + "phone": "509-235-8873", + "fax": "509-235-1856", + "email": "misty@ericksen.com", + "web": "http://www.mistyericksen.com", + "followers": 1779 + }, + { + "firstname": "Bert", + "lastname": "Schadle", + "company": "Guaranty Chevrolet Geo", + "address": "500 Sw Loop #-820", + "city": "Fort Worth", + "country": "Tarrant", + "state": "TX", + "zip": "76115", + "phone": "817-921-5560", + "fax": "817-921-5913", + "email": "bert@schadle.com", + "web": "http://www.bertschadle.com", + "followers": 9753 + }, + { + "firstname": "Bertram", + "lastname": "Quertermous", + "company": "Florida Mining & Materials", + "address": "222 Delaware Ave", + "city": "Wilmington", + "country": "New Castle", + "state": "DE", + "zip": "19801", + "phone": "302-655-8039", + "fax": "302-655-4522", + "email": "bertram@quertermous.com", + "web": "http://www.bertramquertermous.com", + "followers": 4349 + }, + { + "firstname": "Buster", + "lastname": "Wubbel", + "company": "Collins, Joseph B Esq", + "address": "315 Us Rt 1", + "city": "Fairless Hills", + "country": "Bucks", + "state": "PA", + "zip": "19030", + "phone": "215-943-3689", + "fax": "215-943-6049", + "email": "buster@wubbel.com", + "web": "http://www.busterwubbel.com", + "followers": 6911 + }, + { + "firstname": "Mildred", + "lastname": "Gallegas", + "company": "Rogers, William A Jr", + "address": "310 Ridge Rd", + "city": "Claymont", + "country": "New Castle", + "state": "DE", + "zip": "19703", + "phone": "302-792-8044", + "fax": "302-792-1282", + "email": "mildred@gallegas.com", + "web": "http://www.mildredgallegas.com", + "followers": 8618 + }, + { + "firstname": "Pat", + "lastname": "Hoshaw", + "company": "Jorgensen, James L Esq", + "address": "30 Matthews Rd", + "city": "Malvern", + "country": "Chester", + "state": "PA", + "zip": "19355", + "phone": "610-644-7836", + "fax": "610-644-3252", + "email": "pat@hoshaw.com", + "web": "http://www.pathoshaw.com", + "followers": 6030 + }, + { + "firstname": "Marshall", + "lastname": "Hutch", + "company": "Nako, Joy Y", + "address": "Route 519", + "city": "Eighty Four", + "country": "Washington", + "state": "PA", + "zip": "15330", + "phone": "724-225-1729", + "fax": "724-225-7064", + "email": "marshall@hutch.com", + "web": "http://www.marshallhutch.com", + "followers": 6225 + }, + { + "firstname": "Don", + "lastname": "Mestler", + "company": "Coldwell Bnkr Hearthside Rltrs", + "address": "State Hwy #-31", + "city": "Pennington", + "country": "Mercer", + "state": "NJ", + "zip": "08534", + "phone": "609-737-2033", + "fax": "609-737-2374", + "email": "don@mestler.com", + "web": "http://www.donmestler.com", + "followers": 6967 + }, + { + "firstname": "Emery", + "lastname": "Reek", + "company": "Metri Tech Engineering Inc", + "address": "85 S Beachview Dr", + "city": "Jekyll Island", + "country": "Glynn", + "state": "GA", + "zip": "31527", + "phone": "912-635-3866", + "fax": "912-635-4039", + "email": "emery@reek.com", + "web": "http://www.emeryreek.com", + "followers": 2476 + }, + { + "firstname": "Ray", + "lastname": "Srock", + "company": "Tilt Lock Inc", + "address": "8700 E Pinnacle Peak Rd", + "city": "Scottsdale", + "country": "Maricopa", + "state": "AZ", + "zip": "85255", + "phone": "480-585-6138", + "fax": "480-585-4983", + "email": "ray@srock.com", + "web": "http://www.raysrock.com", + "followers": 2387 + }, + { + "firstname": "Nickolas", + "lastname": "Khosravi", + "company": "Brennan, Mary V Esq", + "address": "120 Tustin Ave", + "city": "Newport Beach", + "country": "Orange", + "state": "CA", + "zip": "92663", + "phone": "949-646-6578", + "fax": "949-646-0043", + "email": "nickolas@khosravi.com", + "web": "http://www.nickolaskhosravi.com", + "followers": 3074 + }, + { + "firstname": "Aileen", + "lastname": "Mottern", + "company": "Bennett Hallmark Cards", + "address": "2053 Lemoine Ave", + "city": "Fort Lee", + "country": "Bergen", + "state": "NJ", + "zip": "07024", + "phone": "201-944-1664", + "fax": "201-944-3382", + "email": "aileen@mottern.com", + "web": "http://www.aileenmottern.com", + "followers": 6519 + }, + { + "firstname": "Chad", + "lastname": "Araiza", + "company": "Christiansen, David L Cpa", + "address": "536 Grand Ave", + "city": "Schofield", + "country": "Marathon", + "state": "WI", + "zip": "54476", + "phone": "715-359-8700", + "fax": "715-359-3579", + "email": "chad@araiza.com", + "web": "http://www.chadaraiza.com", + "followers": 4865 + }, + { + "firstname": "Beverly", + "lastname": "Cambel", + "company": "Mcintyre Mcintyre & Mcintyre", + "address": "630 W 8th Ave", + "city": "Anchorage", + "country": "Anchorage", + "state": "AK", + "zip": "99501", + "phone": "907-272-3953", + "fax": "907-272-3618", + "email": "beverly@cambel.com", + "web": "http://www.beverlycambel.com", + "followers": 2393 + }, + { + "firstname": "Janice", + "lastname": "Twiet", + "company": "Henley, Cal Pa", + "address": "136 S Riverside Ave", + "city": "Rialto", + "country": "San Bernardino", + "state": "CA", + "zip": "92376", + "phone": "909-874-6739", + "fax": "909-874-2594", + "email": "janice@twiet.com", + "web": "http://www.janicetwiet.com", + "followers": 7340 + }, + { + "firstname": "Byron", + "lastname": "Fortuna", + "company": "Jackson & Collins Pa", + "address": "700 Sw Higgins Ave", + "city": "Missoula", + "country": "Missoula", + "state": "MT", + "zip": "59803", + "phone": "406-549-8320", + "fax": "406-549-4641", + "email": "byron@fortuna.com", + "web": "http://www.byronfortuna.com", + "followers": 8913 + }, + { + "firstname": "Lynette", + "lastname": "Setlock", + "company": "George S Olive & Co", + "address": "614 W Superior Ave", + "city": "Cleveland", + "country": "Cuyahoga", + "state": "OH", + "zip": "44113", + "phone": "216-566-2265", + "fax": "216-566-2299", + "email": "lynette@setlock.com", + "web": "http://www.lynettesetlock.com", + "followers": 8002 + }, + { + "firstname": "Willard", + "lastname": "Roughen", + "company": "Nakamura Oyama & Assocs Inc", + "address": "9 5officce Product Cent", + "city": "Arlington", + "country": "Tarrant", + "state": "TX", + "zip": "76012", + "phone": "817-265-1847", + "fax": "817-265-0322", + "email": "willard@roughen.com", + "web": "http://www.willardroughen.com", + "followers": 861 + }, + { + "firstname": "Elisa", + "lastname": "Gracely", + "company": "Alexander, Christine T Esq", + "address": "1805 Kings Hwy", + "city": "Brooklyn", + "country": "Kings", + "state": "NY", + "zip": "11229", + "phone": "718-627-1421", + "fax": "718-627-9346", + "email": "elisa@gracely.com", + "web": "http://www.elisagracely.com", + "followers": 5321 + }, + { + "firstname": "Jeri", + "lastname": "Farstvedt", + "company": "Regan, Denis J Esq", + "address": "16133 Ventura Blvd #-700", + "city": "Encino", + "country": "Los Angeles", + "state": "CA", + "zip": "91436", + "phone": "818-986-8843", + "fax": "818-986-6786", + "email": "jeri@farstvedt.com", + "web": "http://www.jerifarstvedt.com", + "followers": 9529 + }, + { + "firstname": "Stacey", + "lastname": "Blow", + "company": "Schechter, Jeffrey S Esq", + "address": "136 S Riverside Ave", + "city": "Rialto", + "country": "San Bernardino", + "state": "CA", + "zip": "92376", + "phone": "909-874-0274", + "fax": "909-874-8538", + "email": "stacey@blow.com", + "web": "http://www.staceyblow.com", + "followers": 6685 + }, + { + "firstname": "Bryan", + "lastname": "Rovell", + "company": "All N All Shop", + "address": "90 Hackensack St", + "city": "East Rutherford", + "country": "Bergen", + "state": "NJ", + "zip": "07073", + "phone": "201-939-2788", + "fax": "201-939-9079", + "email": "bryan@rovell.com", + "web": "http://www.bryanrovell.com", + "followers": 2687 + }, + { + "firstname": "Joey", + "lastname": "Bolick", + "company": "Utility Trailer Sales", + "address": "7700 N Council Rd", + "city": "Oklahoma City", + "country": "Oklahoma", + "state": "OK", + "zip": "73132", + "phone": "405-728-5972", + "fax": "405-728-5244", + "email": "joey@bolick.com", + "web": "http://www.joeybolick.com", + "followers": 8465 + } +] diff --git a/src/views/ui-elements/card/CardActions.vue b/src/views/ui-elements/card/CardActions.vue new file mode 100644 index 0000000..5e21525 --- /dev/null +++ b/src/views/ui-elements/card/CardActions.vue @@ -0,0 +1,88 @@ + + + + + diff --git a/src/views/ui-elements/card/CardAnalytics.vue b/src/views/ui-elements/card/CardAnalytics.vue new file mode 100644 index 0000000..34885de --- /dev/null +++ b/src/views/ui-elements/card/CardAnalytics.vue @@ -0,0 +1,533 @@ + + + + + + + + diff --git a/src/views/ui-elements/card/CardBasic.vue b/src/views/ui-elements/card/CardBasic.vue new file mode 100644 index 0000000..d4fc5bb --- /dev/null +++ b/src/views/ui-elements/card/CardBasic.vue @@ -0,0 +1,523 @@ + + + + + + + diff --git a/src/views/ui-elements/card/CardColors.vue b/src/views/ui-elements/card/CardColors.vue new file mode 100644 index 0000000..fa95a00 --- /dev/null +++ b/src/views/ui-elements/card/CardColors.vue @@ -0,0 +1,281 @@ + + + diff --git a/src/views/ui-elements/card/CardStatistics.vue b/src/views/ui-elements/card/CardStatistics.vue new file mode 100644 index 0000000..122754a --- /dev/null +++ b/src/views/ui-elements/card/CardStatistics.vue @@ -0,0 +1,268 @@ + + + + + + diff --git a/src/views/ui-elements/card/analyticsData.js b/src/views/ui-elements/card/analyticsData.js new file mode 100644 index 0000000..92d24d6 --- /dev/null +++ b/src/views/ui-elements/card/analyticsData.js @@ -0,0 +1,1093 @@ +/*========================================================================================= + File Name: analyticsData.vue + Description: Data shown by charts + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + + +export default { + // LINE CHART + siteTraffic: { + series: [ + { + name: 'Traffic Rate', + data: [150, 200, 125, 225, 200, 250] + } + ], + chartOptions: { + grid: { + show: false, + padding: { + left: 0, + right: 0 + } + }, + chart: { + type: 'line', + dropShadow: { + enabled: true, + top: 5, + left: 0, + blur: 4, + opacity: 0.10 + }, + toolbar: { + show: false + }, + sparkline: { + enabled: true + } + }, + stroke: { + width: 5, + curve: 'smooth' + }, + xaxis: { + type: 'numeric' + }, + colors: ['#7367F0'], + fill: { + type: 'gradient', + gradient: { + shade: 'dark', + gradientToColors: ['#A9A2F6'], + shadeIntensity: 1, + type: 'horizontal', + opacityFrom: 1, + opacityTo: 1, + stops: [0, 100, 100, 100] + } + }, + markers: { + size: 0, + hover: { + size: 5 + } + }, + tooltip: { + x: { show: false } + } + } + }, + activeUsers: { + series: [ + { + name: 'Active Users', + data: [750, 1000, 900, 1250, 1000, 1200, 1100] + } + ], + chartOptions: { + grid: { + show: false, + padding: { + left: 0, + right: 0 + } + }, + chart: { + type: 'line', + dropShadow: { + enabled: true, + top: 5, + left: 0, + blur: 4, + opacity: 0.10 + }, + toolbar: { + show: false + }, + sparkline: { + enabled: true + } + }, + stroke: { + width: 5, + curve: 'smooth' + }, + xaxis: { + type: 'numeric' + }, + colors: ['#28C76F'], + fill: { + type: 'gradient', + gradient: { + shade: 'dark', + gradientToColors: ['#55DD92'], + shadeIntensity: 1, + type: 'horizontal', + opacityFrom: 1, + opacityTo: 1, + stops: [0, 75, 100, 100] + } + }, + markers: { + size: 0, + hover: { + size: 5 + } + }, + tooltip: { + x: { show: false } + } + } + }, + newsletter: { + series: [ + { + name: 'Newsletter', + data: [365, 390, 365, 400, 375, 400] + } + ], + chartOptions: { + grid: { + show: false, + padding: { + left: 0, + right: 0 + } + }, + chart: { + type: 'line', + dropShadow: { + enabled: true, + top: 5, + left: 0, + blur: 4, + opacity: 0.10 + }, + toolbar: { + show: false + }, + sparkline: { + enabled: true + } + }, + stroke: { + width: 5, + curve: 'smooth' + }, + xaxis: { + type: 'numeric' + }, + colors: ['#FF9F43'], + fill: { + type: 'gradient', + gradient: { + shade: 'dark', + gradientToColors: ['#ffc085'], + shadeIntensity: 1, + type: 'horizontal', + opacityFrom: 1, + opacityTo: 1, + stops: [0, 75, 100, 100] + } + }, + markers: { + size: 0, + hover: { + size: 5 + } + }, + tooltip: { + x: { show: false } + } + } + }, + revenueComparisonLine: { + // series: [{ + // name: "This Month", + // data: [45000, 47000, 44800, 47500, 45500, 48000, 46500, 48600] + // }, + // { + // name: "Last Month", + // data: [46000, 48000, 45500, 46600, 44500, 46500, 45000, 47000] + // } + // ], + chartOptions: { + chart: { + toolbar: { show: false }, + dropShadow: { + enabled: true, + top: 5, + left: 0, + blur: 4, + opacity: 0.10 + } + }, + stroke: { + curve: 'smooth', + dashArray: [0, 8], + width: [4, 2] + }, + grid: { + borderColor: '#e7e7e7' + }, + legend: { + show: false + }, + colors: ['#F97794', '#b8c2cc'], + fill: { + type: 'gradient', + gradient: { + shade: 'dark', + inverseColors: false, + gradientToColors: ['#7367F0', '#b8c2cc'], + shadeIntensity: 1, + type: 'horizontal', + opacityFrom: 1, + opacityTo: 1, + stops: [0, 100, 100, 100] + } + }, + markers: { + size: 0, + hover: { + size: 5 + } + }, + xaxis: { + labels: { + style: { + cssClass: 'text-grey fill-current' + } + }, + axisTicks: { + show: false + }, + categories: ['01', '05', '09', '13', '17', '21', '26', '31'], + axisBorder: { + show: false + } + }, + yaxis: { + tickAmount: 5, + labels: { + style: { + cssClass: 'text-grey fill-current' + }, + formatter (val) { + return val > 999 ? `${(val / 1000).toFixed(1)}k` : val + } + } + }, + tooltip: { + x: { show: false } + } + } + }, + + // LINE AREA CHART + subscribersGained: { + series: [ + { + name: 'Subscribers', + data: [28, 40, 36, 52, 38, 60, 55] + } + ], + chartOptions: { + grid: { + show: false, + padding: { + left: 0, + right: 0 + } + }, + chart: { + toolbar: { + show: false + }, + sparkline: { + enabled: true + } + }, + dataLabels: { + enabled: false + }, + stroke: { + curve: 'smooth', + width: 2.5 + }, + fill: { + type: 'gradient', + gradient: { + shadeIntensity: 0.9, + opacityFrom: 0.7, + opacityTo: 0.5, + stops: [0, 80, 100] + } + }, + xaxis: { + type: 'numeric', + lines: { + show: false + }, + axisBorder: { + show: false + }, + labels: { show: false } + }, + yaxis: [ + { + y: 0, + offsetX: 0, + offsetY: 0, + padding: { + left: 0, + right: 0 + } + } + ], + tooltip: { + x: { show: false } + } + } + }, + quarterlySales: { + series: [ + { + name: 'Sales', + data: [10, 15, 7, 12, 3, 16] + } + ], + chartOptions: { + grid: { + show: false, + padding: { + left: 0, + right: 0 + } + }, + chart: { + toolbar: { + show: false + }, + sparkline: { + enabled: true + } + }, + dataLabels: { + enabled: false + }, + stroke: { + curve: 'smooth', + width: 2.5 + }, + fill: { + type: 'gradient', + gradient: { + shadeIntensity: 0.9, + opacityFrom: 0.7, + opacityTo: 0.5, + stops: [0, 80, 100] + } + }, + xaxis: { + type: 'numeric', + lines: { + show: false + }, + axisBorder: { + show: false + }, + labels: { show: false } + }, + yaxis: [ + { + y: 0, + offsetX: 0, + offsetY: 0, + padding: { + left: 0, + right: 0 + } + } + ], + tooltip: { + x: { show: false } + } + } + }, + revenueGenerated: { + series: [ + { + name: 'Revenue', + data: [350, 275, 400, 300, 350, 300, 450] + } + ], + chartOptions: { + grid: { + show: false, + padding: { + left: 0, + right: 0 + } + }, + chart: { + toolbar: { + show: false + }, + sparkline: { + enabled: true + } + }, + dataLabels: { + enabled: false + }, + stroke: { + curve: 'smooth', + width: 2.5 + }, + fill: { + type: 'gradient', + gradient: { + shadeIntensity: 0.9, + opacityFrom: 0.7, + opacityTo: 0.5, + stops: [0, 80, 100] + } + }, + xaxis: { + type: 'numeric', + lines: { + show: false + }, + axisBorder: { + show: false + }, + labels: { show: false } + }, + yaxis: [ + { + y: 0, + offsetX: 0, + offsetY: 0, + padding: { + left: 0, + right: 0 + } + } + ], + tooltip: { + x: { show: false } + } + } + }, + ordersRecevied: { + series: [ + { + name: 'Orders', + data: [10, 15, 8, 15, 7, 12, 8] + } + ], + chartOptions: { + grid: { + show: false, + padding: { + left: 0, + right: 0 + } + }, + chart: { + toolbar: { + show: false + }, + sparkline: { + enabled: true + } + }, + dataLabels: { + enabled: false + }, + stroke: { + curve: 'smooth', + width: 2.5 + }, + fill: { + type: 'gradient', + gradient: { + shadeIntensity: 0.9, + opacityFrom: 0.7, + opacityTo: 0.5, + stops: [0, 80, 100] + } + }, + xaxis: { + type: 'numeric', + lines: { + show: false + }, + axisBorder: { + show: false + }, + labels: { show: false } + }, + yaxis: [ + { + y: 0, + offsetX: 0, + offsetY: 0, + padding: { + left: 0, + right: 0 + } + } + ], + tooltip: { + x: { show: false } + } + } + }, + // BAR CHART + salesBar: { + // series: [{ + // name: 'Sessions', + // data: [75, 125, 225, 175, 125, 75, 25] + // }], + chartOptions: { + grid: { + show: false, + padding: { + left: 0, + right: 0 + } + }, + chart: { + type: 'bar', + sparkline: { enabled: true }, + toolbar: { show: false } + }, + states: { + hover: { + filter: 'none' + } + }, + colors: ['rgba(115,103,240,0.15)', 'rgba(115,103,240,0.15)', '#7367f0', 'rgba(115,103,240,0.15)', 'rgba(115,103,240,0.15)', 'rgba(115,103,240,0.15)'], + plotOptions: { + bar: { + columnWidth: '45%', + distributed: true, + endingShape: 'rounded' // Deprecated + // borderRadius: '20px', // Coming Soon + } + }, + tooltip: { + x: { show: false } + } + } + }, + // RADIAL BAR + goalOverviewRadialBar: { + // series: [83], + chartOptions: { + plotOptions: { + radialBar: { + size: 110, + startAngle: -150, + endAngle: 150, + hollow: { + size: '77%' + }, + track: { + background: '#bfc5cc', + strokeWidth: '50%' + }, + dataLabels: { + name: { + show: false + }, + value: { + offsetY: 18, + color: '#99a2ac', + fontSize: '4rem' + } + } + } + }, + colors: ['#00db89'], + fill: { + type: 'gradient', + gradient: { + shade: 'dark', + type: 'horizontal', + shadeIntensity: 0.5, + gradientToColors: ['#00b5b5'], + inverseColors: true, + opacityFrom: 1, + opacityTo: 1, + stops: [0, 100] + } + }, + stroke: { + lineCap: 'round' + }, + chart: { + sparkline: { + enabled: true + }, + dropShadow: { + enabled: true, + blur: 3, + left: 1, + top: 1, + opacity: 0.1 + } + } + } + }, + supportTrackerRadialBar: { + // chartData: { + // totalTickets: 163, + // openTickets: 103, + // lastResponse: '1d', + // }, + // series: [83], + chartOptions: { + plotOptions: { + radialBar: { + size: 158, + offsetY: -30, + startAngle: -150, + endAngle: 150, + hollow: { + size: '65%' + }, + track: { + background: 'rgba(0,0,0,0)', + strokeWidth: '100%' + + }, + dataLabels: { + value: { + offsetY: 30, + color: '#99a2ac', + fontSize: '2rem' + } + } + } + }, + colors: ['#EA5455'], + fill: { + type: 'gradient', + gradient: { + // enabled: true, + shade: 'dark', + type: 'horizontal', + shadeIntensity: 0.5, + gradientToColors: ['#7367F0'], + inverseColors: true, + opacityFrom: 1, + opacityTo: 1, + stops: [0, 100] + } + }, + stroke: { + dashArray: 8 + }, + chart: { + sparkline: { + } + }, + labels: ['Completed Tickets'] + } + }, + // RADAR + statisticsRadar: { + // series: [{ + // name: 'Visits', + // data: [90, 50, 86, 40, 100, 20], + // }, { + // name: 'Sales', + // data: [70, 75, 70, 76, 20, 85], + // }], + chartOptions: { + labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'], + dataLabels: { + style: { + colors: ['#b9c3cd', '#b9c3cd', '#b9c3cd', '#b9c3cd', '#b9c3cd', '#b9c3cd'] + } + }, + yaxis: { + show: false + }, + grid: { + show: false + }, + legend: { show: false }, + chart: { + dropShadow: { + enabled: true, + blur: 8, + left: 1, + top: 1, + opacity: 0.2 + }, + toolbar: { + show: false + } + }, + stroke: { + width: 0 + }, + colors: ['#9f8ed7', '#1edec5'], + plotOptions: { + radar: { + polygons: { + strokeColors: ['#e8e8e8', 'transparent', 'transparent', 'transparent', 'transparent', 'transparent'], + connectorColors: 'transparent' + } + } + }, + fill: { + type: 'gradient', + gradient: { + shade: 'dark', + gradientToColors: ['#8e9ad6', '#1fcadb'], + shadeIntensity: 1, + type: 'horizontal', + opacityFrom: 1, + opacityTo: 1, + stops: [0, 100, 100, 100] + } + }, + markers: { + size: 0 + } + } + }, + // SessionsByDevice + sessionsByDeviceDonut: { + // analyticsData: [ + // { device: 'Dekstop', icon: 'MonitorIcon', color: 'primary', sessionsPercentgae: 58.6, comparedResultPercentage: 2 }, + // { device: 'Mobile', icon: 'SmartphoneIcon', color: 'warning', sessionsPercentgae: 34.9, comparedResultPercentage: 8 }, + // { device: 'Tablet', icon: 'TabletIcon', color: 'danger', sessionsPercentgae: 6.5, comparedResultPercentage: -5 }, + // ], + // comparedResult: [2, -3, 8], + // series: [58.6, 34.9, 6.5], + chartOptions: { + labels: ['فعال', 'نیمه فعال', 'غیر فعال'], + dataLabels: { + enabled: false + }, + legend: { show: false }, + chart: { + offsetY: 30, + type: 'donut', + toolbar: { + show: false + } + }, + stroke: { width: 0 }, + colors: ['green', '#FF9F43', '#EA5455'], + fill: { + type: 'gradient', + gradient: { + gradientToColors: ['#79ab80', '#FFC085', '#f29292'] + } + } + } + }, + // Product Orders + productOrdersRadialBar: { + // analyticsData: [ + // { 'orderType': 'Finished', 'counts': 23043, color: 'primary' }, + // { 'orderType': 'Pending', 'counts': 14658, color: 'warning' }, + // { 'orderType': 'Rejected ', 'counts': 4758, color: 'danger' }, + // ], + // series: [70, 52, 26], + chartOptions: { + labels: ['تمام شده', 'در حال پردازش', 'لغو شده'], + plotOptions: { + radialBar: { + size: 165, + offsetY: -5, + hollow: { + size: '20%' + }, + track: { + background: '#ebebeb', + strokeWidth: '100%', + margin: 15 + }, + dataLabels: { + show: true, + name: { + fontSize: '18px' + }, + value: { + fontSize: '16px', + color: '#636a71', + offsetY: 11 + }, + total: { + show: true, + label: 'جمع سفارشات', + formatter () { + return 42459 + } + } + } + } + }, + responsive: [ + { + breakpoint: 576, + options: { + plotOptions: { + radialBar: { + size: 150, + hollow: { + size: '20%' + }, + track: { + background: '#ebebeb', + strokeWidth: '100%', + margin: 15 + } + } + } + } + } + ], + colors: ['#7961F9', '#FF9F43', '#EA5455'], + fill: { + type: 'gradient', + gradient: { + // enabled: true, + shade: 'dark', + type: 'vertical', + shadeIntensity: 0.5, + gradientToColors: ['#9c8cfc', '#FFC085', '#f29292'], + inverseColors: false, + opacityFrom: 1, + opacityTo: 1, + stops: [0, 100] + } + }, + stroke: { + lineCap: 'round' + }, + chart: { + height: 355, + dropShadow: { + enabled: true, + blur: 3, + left: 1, + top: 1, + opacity: 0.1 + } + } + } + }, + // Customers + customersPie: { + // analyticsData: [ + // { 'customerType': 'New', 'counts': 890, color: 'primary' }, + // { 'customerType': 'Returning', 'counts': 258, color: 'warning' }, + // { 'customerType': 'Referrals ', 'counts': 149, color: 'danger' }, + // ], + // series: [690, 258, 149], + chartOptions: { + labels: ['New', 'Returning', 'Referrals'], + dataLabels: { + enabled: false + }, + legend: { show: false }, + chart: { + type: 'pie', + offsetY: 0, + dropShadow: { + enabled: false, + blur: 5, + left: 1, + top: 1, + opacity: 0.2 + }, + toolbar: { + show: false + } + }, + stroke: { + width: 5 + }, + colors: ['#7961F9', '#FF9F43', '#EA5455'], + fill: { + type: 'gradient', + gradient: { + gradientToColors: ['#9c8cfc', '#FFC085', '#f29292'] + } + } + } + }, + // Sales monthly + salesLine: { + // series: [{ + // name: "Sales", + // data: [140, 180, 150, 205, 160, 295, 125, 255, 205, 305, 240, 295] + // }], + chartOptions: { + chart: { + toolbar: { show: false }, + dropShadow: { + enabled: true, + top: 20, + left: 2, + blur: 6, + opacity: 0.20 + } + }, + stroke: { + curve: 'smooth', + width: 4 + }, + grid: { + borderColor: '#ebebeb' + }, + legend: { + show: false + }, + colors: ['#df87f2'], + fill: { + type: 'gradient', + gradient: { + shade: 'dark', + inverseColors: false, + gradientToColors: ['#7367F0'], + shadeIntensity: 1, + type: 'horizontal', + opacityFrom: 1, + opacityTo: 1, + stops: [0, 100, 100, 100] + } + }, + markers: { + size: 0, + hover: { + size: 5 + } + }, + xaxis: { + labels: { + style: { + cssClass: 'text-grey fill-current' + } + }, + axisTicks: { + show: false + }, + categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'July', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], + axisBorder: { + show: false + } + }, + yaxis: { + tickAmount: 5, + labels: { + style: { + cssClass: 'text-grey fill-current' + }, + formatter (val) { + return val > 999 ? `${(val / 1000).toFixed(1)}k` : val + } + } + }, + tooltip: { + x: { show: false } + } + } + }, + // ClientRetention Bar Chart + clientRetentionBar: { + // series: [{ + // name: 'New Clients', + // data: [175, 125, 225, 175, 160, 189, 206, 134, 159, 216, 148, 123] + // }, { + // name: 'Retained Clients', + // data: [-144, -155, -141, -167, -122, -143, -158, -107, -126, -131, -140, -137] + // }], + chartOptions: { + grid: { + borderColor: '#ebebeb', + padding: { + left: 0, + right: 0 + } + }, + legend: { + show: false + }, + dataLabels: { + enabled: false + }, + chart: { + stacked: true, + type: 'bar', + toolbar: { show: false } + }, + colors: ['#009688', '#EA5455'], + plotOptions: { + bar: { + columnWidth: '10%' + } + }, + xaxis: { + labels: { + style: { + cssClass: 'text-grey fill-current' + } + }, + axisTicks: { + show: false + }, + categories: ['01-99', '02-99', '03-99', '04-99', '05-99', '06-99', '07-99', '08-99', '09-99', '10-99', '11-99', '12-99'], + axisBorder: { + show: false + } + }, + yaxis: { + tickAmount: 5, + labels: { + style: { + cssClass: 'text-grey fill-current' + } + } + }, + tooltip: { + x: { show: false } + } + } + }, + // OTHER + browserAnalytics: [ + { + id: 1, + name: 'Google Chrome', + ratio: 73, + time: 'Mon Dec 10 2018 07:46:05 GMT+0000 (GMT)', + comparedResult: '800' + }, + { + id: 3, + name: 'Opera', + ratio: 8, + time: 'Mon Dec 10 2018 07:46:05 GMT+0000 (GMT)', + comparedResult: '-200' + }, + { + id: 2, + name: 'Firefox', + ratio: 19, + time: 'Mon Dec 10 2018 07:46:05 GMT+0000 (GMT)', + comparedResult: '100' + }, + { + id: 4, + name: 'Internet Explorer', + ratio: 27, + time: 'Mon Dec 10 2018 07:46:05 GMT+0000 (GMT)', + comparedResult: '-450' + } + ] +} diff --git a/src/views/ui-elements/colors/Colors.vue b/src/views/ui-elements/colors/Colors.vue new file mode 100644 index 0000000..9f6fd1b --- /dev/null +++ b/src/views/ui-elements/colors/Colors.vue @@ -0,0 +1,44 @@ + + + + + + + + diff --git a/src/views/ui-elements/colors/ColorsChangeColor.vue b/src/views/ui-elements/colors/ColorsChangeColor.vue new file mode 100644 index 0000000..382bc7d --- /dev/null +++ b/src/views/ui-elements/colors/ColorsChangeColor.vue @@ -0,0 +1,135 @@ + + + + + + + + diff --git a/src/views/ui-elements/colors/ColorsChangeColorSSR.vue b/src/views/ui-elements/colors/ColorsChangeColorSSR.vue new file mode 100644 index 0000000..f3b5952 --- /dev/null +++ b/src/views/ui-elements/colors/ColorsChangeColorSSR.vue @@ -0,0 +1,76 @@ + + + + + + diff --git a/src/views/ui-elements/colors/ColorsCustomization.vue b/src/views/ui-elements/colors/ColorsCustomization.vue new file mode 100644 index 0000000..be268b7 --- /dev/null +++ b/src/views/ui-elements/colors/ColorsCustomization.vue @@ -0,0 +1,55 @@ + + + + diff --git a/src/views/ui-elements/colors/ColorsDefault.vue b/src/views/ui-elements/colors/ColorsDefault.vue new file mode 100644 index 0000000..675ffb9 --- /dev/null +++ b/src/views/ui-elements/colors/ColorsDefault.vue @@ -0,0 +1,65 @@ + + + + + + diff --git a/src/views/ui-elements/colors/ColorsGradient.vue b/src/views/ui-elements/colors/ColorsGradient.vue new file mode 100644 index 0000000..399e997 --- /dev/null +++ b/src/views/ui-elements/colors/ColorsGradient.vue @@ -0,0 +1,65 @@ + + + + + + diff --git a/src/views/ui-elements/colors/ColorsTailwind.vue b/src/views/ui-elements/colors/ColorsTailwind.vue new file mode 100644 index 0000000..ea379ff --- /dev/null +++ b/src/views/ui-elements/colors/ColorsTailwind.vue @@ -0,0 +1,52 @@ + + + + + + + + diff --git a/src/views/ui-elements/colors/tailwind/TailwindAddMoreColors.vue b/src/views/ui-elements/colors/tailwind/TailwindAddMoreColors.vue new file mode 100644 index 0000000..8968b25 --- /dev/null +++ b/src/views/ui-elements/colors/tailwind/TailwindAddMoreColors.vue @@ -0,0 +1,46 @@ + + + + + + diff --git a/src/views/ui-elements/colors/tailwind/TailwindBackgroundClasses.vue b/src/views/ui-elements/colors/tailwind/TailwindBackgroundClasses.vue new file mode 100644 index 0000000..0a69630 --- /dev/null +++ b/src/views/ui-elements/colors/tailwind/TailwindBackgroundClasses.vue @@ -0,0 +1,44 @@ + + + + diff --git a/src/views/ui-elements/colors/tailwind/TailwindTextClasses.vue b/src/views/ui-elements/colors/tailwind/TailwindTextClasses.vue new file mode 100644 index 0000000..f0e9e33 --- /dev/null +++ b/src/views/ui-elements/colors/tailwind/TailwindTextClasses.vue @@ -0,0 +1,44 @@ + + + + diff --git a/src/views/ui-elements/data-list/DataViewSidebar.vue b/src/views/ui-elements/data-list/DataViewSidebar.vue new file mode 100644 index 0000000..a0798d0 --- /dev/null +++ b/src/views/ui-elements/data-list/DataViewSidebar.vue @@ -0,0 +1,247 @@ + + + + + + + + diff --git a/src/views/ui-elements/data-list/list-view/DataListListView.vue b/src/views/ui-elements/data-list/list-view/DataListListView.vue new file mode 100644 index 0000000..cd9e0c4 --- /dev/null +++ b/src/views/ui-elements/data-list/list-view/DataListListView.vue @@ -0,0 +1,334 @@ + + + + + + + diff --git a/src/views/ui-elements/data-list/thumb-view/DataListThumbView.vue b/src/views/ui-elements/data-list/thumb-view/DataListThumbView.vue new file mode 100644 index 0000000..6b2321f --- /dev/null +++ b/src/views/ui-elements/data-list/thumb-view/DataListThumbView.vue @@ -0,0 +1,318 @@ + + + + + + + diff --git a/src/views/ui-elements/grid/tailwind/GridAutoColumnWidth.vue b/src/views/ui-elements/grid/tailwind/GridAutoColumnWidth.vue new file mode 100644 index 0000000..8d29b6d --- /dev/null +++ b/src/views/ui-elements/grid/tailwind/GridAutoColumnWidth.vue @@ -0,0 +1,97 @@ + + + + diff --git a/src/views/ui-elements/grid/tailwind/GridBasicGrid.vue b/src/views/ui-elements/grid/tailwind/GridBasicGrid.vue new file mode 100644 index 0000000..9a6652d --- /dev/null +++ b/src/views/ui-elements/grid/tailwind/GridBasicGrid.vue @@ -0,0 +1,109 @@ + + + + diff --git a/src/views/ui-elements/grid/tailwind/GridColumnOrder.vue b/src/views/ui-elements/grid/tailwind/GridColumnOrder.vue new file mode 100644 index 0000000..7a5c9d6 --- /dev/null +++ b/src/views/ui-elements/grid/tailwind/GridColumnOrder.vue @@ -0,0 +1,30 @@ + + + + diff --git a/src/views/ui-elements/grid/tailwind/GridColumnSpacing.vue b/src/views/ui-elements/grid/tailwind/GridColumnSpacing.vue new file mode 100644 index 0000000..ede04a2 --- /dev/null +++ b/src/views/ui-elements/grid/tailwind/GridColumnSpacing.vue @@ -0,0 +1,50 @@ + + + + diff --git a/src/views/ui-elements/grid/tailwind/GridMixedColumnSizes.vue b/src/views/ui-elements/grid/tailwind/GridMixedColumnSizes.vue new file mode 100644 index 0000000..4113a61 --- /dev/null +++ b/src/views/ui-elements/grid/tailwind/GridMixedColumnSizes.vue @@ -0,0 +1,45 @@ + + + + diff --git a/src/views/ui-elements/grid/tailwind/GridResponsiveGrids.vue b/src/views/ui-elements/grid/tailwind/GridResponsiveGrids.vue new file mode 100644 index 0000000..ee64d4d --- /dev/null +++ b/src/views/ui-elements/grid/tailwind/GridResponsiveGrids.vue @@ -0,0 +1,55 @@ + + + + + + diff --git a/src/views/ui-elements/grid/tailwind/GridSimpleOffset.vue b/src/views/ui-elements/grid/tailwind/GridSimpleOffset.vue new file mode 100644 index 0000000..aca4a5d --- /dev/null +++ b/src/views/ui-elements/grid/tailwind/GridSimpleOffset.vue @@ -0,0 +1,40 @@ + + + + diff --git a/src/views/ui-elements/grid/tailwind/GridTailwind.vue b/src/views/ui-elements/grid/tailwind/GridTailwind.vue new file mode 100644 index 0000000..a739a54 --- /dev/null +++ b/src/views/ui-elements/grid/tailwind/GridTailwind.vue @@ -0,0 +1,68 @@ + + + + + + + + diff --git a/src/views/ui-elements/grid/tailwind/GridWrappingColumns.vue b/src/views/ui-elements/grid/tailwind/GridWrappingColumns.vue new file mode 100644 index 0000000..dd582f1 --- /dev/null +++ b/src/views/ui-elements/grid/tailwind/GridWrappingColumns.vue @@ -0,0 +1,36 @@ + + + + diff --git a/src/views/ui-elements/grid/vuesax/GridColumnOffset.vue b/src/views/ui-elements/grid/vuesax/GridColumnOffset.vue new file mode 100644 index 0000000..5082487 --- /dev/null +++ b/src/views/ui-elements/grid/vuesax/GridColumnOffset.vue @@ -0,0 +1,76 @@ + + + + diff --git a/src/views/ui-elements/grid/vuesax/GridDesignConcept.vue b/src/views/ui-elements/grid/vuesax/GridDesignConcept.vue new file mode 100644 index 0000000..9c1e742 --- /dev/null +++ b/src/views/ui-elements/grid/vuesax/GridDesignConcept.vue @@ -0,0 +1,87 @@ + + + + diff --git a/src/views/ui-elements/grid/vuesax/GridFlexAlignment.vue b/src/views/ui-elements/grid/vuesax/GridFlexAlignment.vue new file mode 100644 index 0000000..bd14806 --- /dev/null +++ b/src/views/ui-elements/grid/vuesax/GridFlexAlignment.vue @@ -0,0 +1,34 @@ + + + + + + diff --git a/src/views/ui-elements/grid/vuesax/GridFlexLayout.vue b/src/views/ui-elements/grid/vuesax/GridFlexLayout.vue new file mode 100644 index 0000000..bdaff4c --- /dev/null +++ b/src/views/ui-elements/grid/vuesax/GridFlexLayout.vue @@ -0,0 +1,77 @@ + + + + diff --git a/src/views/ui-elements/grid/vuesax/GridFlexOrder.vue b/src/views/ui-elements/grid/vuesax/GridFlexOrder.vue new file mode 100644 index 0000000..066df70 --- /dev/null +++ b/src/views/ui-elements/grid/vuesax/GridFlexOrder.vue @@ -0,0 +1,58 @@ + + + + diff --git a/src/views/ui-elements/grid/vuesax/GridOverview.vue b/src/views/ui-elements/grid/vuesax/GridOverview.vue new file mode 100644 index 0000000..cf33d82 --- /dev/null +++ b/src/views/ui-elements/grid/vuesax/GridOverview.vue @@ -0,0 +1,33 @@ + + + + + + diff --git a/src/views/ui-elements/grid/vuesax/GridResponsiveLayout.vue b/src/views/ui-elements/grid/vuesax/GridResponsiveLayout.vue new file mode 100644 index 0000000..54aa56a --- /dev/null +++ b/src/views/ui-elements/grid/vuesax/GridResponsiveLayout.vue @@ -0,0 +1,62 @@ + + + + + + diff --git a/src/views/ui-elements/grid/vuesax/GridVuesax.vue b/src/views/ui-elements/grid/vuesax/GridVuesax.vue new file mode 100644 index 0000000..76a4792 --- /dev/null +++ b/src/views/ui-elements/grid/vuesax/GridVuesax.vue @@ -0,0 +1,47 @@ + + + + + + + + diff --git a/src/views/ui-elements/grid/vuesax/flex-alignment/FlexAlignmentBottom.vue b/src/views/ui-elements/grid/vuesax/flex-alignment/FlexAlignmentBottom.vue new file mode 100644 index 0000000..4aa1b8f --- /dev/null +++ b/src/views/ui-elements/grid/vuesax/flex-alignment/FlexAlignmentBottom.vue @@ -0,0 +1,34 @@ + + + + diff --git a/src/views/ui-elements/grid/vuesax/flex-alignment/FlexAlignmentCenter.vue b/src/views/ui-elements/grid/vuesax/flex-alignment/FlexAlignmentCenter.vue new file mode 100644 index 0000000..1b70800 --- /dev/null +++ b/src/views/ui-elements/grid/vuesax/flex-alignment/FlexAlignmentCenter.vue @@ -0,0 +1,34 @@ + + + + diff --git a/src/views/ui-elements/grid/vuesax/flex-alignment/FlexAlignmentTop.vue b/src/views/ui-elements/grid/vuesax/flex-alignment/FlexAlignmentTop.vue new file mode 100644 index 0000000..adc9c7b --- /dev/null +++ b/src/views/ui-elements/grid/vuesax/flex-alignment/FlexAlignmentTop.vue @@ -0,0 +1,34 @@ + + + + diff --git a/src/views/ui-elements/table/Table.vue b/src/views/ui-elements/table/Table.vue new file mode 100644 index 0000000..e03f304 --- /dev/null +++ b/src/views/ui-elements/table/Table.vue @@ -0,0 +1,55 @@ + + + + + + diff --git a/src/views/ui-elements/table/TableDefault.vue b/src/views/ui-elements/table/TableDefault.vue new file mode 100644 index 0000000..cff0ded --- /dev/null +++ b/src/views/ui-elements/table/TableDefault.vue @@ -0,0 +1,257 @@ + + + + + + diff --git a/src/views/ui-elements/table/TableEditDataTable.vue b/src/views/ui-elements/table/TableEditDataTable.vue new file mode 100644 index 0000000..12d6b62 --- /dev/null +++ b/src/views/ui-elements/table/TableEditDataTable.vue @@ -0,0 +1,204 @@ + + + + + + diff --git a/src/views/ui-elements/table/TableExpandableData.vue b/src/views/ui-elements/table/TableExpandableData.vue new file mode 100644 index 0000000..4898bd6 --- /dev/null +++ b/src/views/ui-elements/table/TableExpandableData.vue @@ -0,0 +1,206 @@ + + + + + + diff --git a/src/views/ui-elements/table/TableFilterSorter.vue b/src/views/ui-elements/table/TableFilterSorter.vue new file mode 100644 index 0000000..75ca282 --- /dev/null +++ b/src/views/ui-elements/table/TableFilterSorter.vue @@ -0,0 +1,164 @@ + + + + + + diff --git a/src/views/ui-elements/table/TableMiscellaneous.vue b/src/views/ui-elements/table/TableMiscellaneous.vue new file mode 100644 index 0000000..f1db34d --- /dev/null +++ b/src/views/ui-elements/table/TableMiscellaneous.vue @@ -0,0 +1,276 @@ + + + + + + diff --git a/src/views/ui-elements/table/TableMultipleSelected.vue b/src/views/ui-elements/table/TableMultipleSelected.vue new file mode 100644 index 0000000..1b7b663 --- /dev/null +++ b/src/views/ui-elements/table/TableMultipleSelected.vue @@ -0,0 +1,213 @@ + + + + + + diff --git a/src/views/ui-elements/table/TablePagination.vue b/src/views/ui-elements/table/TablePagination.vue new file mode 100644 index 0000000..23ae954 --- /dev/null +++ b/src/views/ui-elements/table/TablePagination.vue @@ -0,0 +1,249 @@ + + + + + + diff --git a/src/views/ui-elements/table/TableSSR.vue b/src/views/ui-elements/table/TableSSR.vue new file mode 100644 index 0000000..b02023f --- /dev/null +++ b/src/views/ui-elements/table/TableSSR.vue @@ -0,0 +1,297 @@ + + + + + + diff --git a/src/views/ui-elements/table/TableSingleSelected.vue b/src/views/ui-elements/table/TableSingleSelected.vue new file mode 100644 index 0000000..e6524eb --- /dev/null +++ b/src/views/ui-elements/table/TableSingleSelected.vue @@ -0,0 +1,213 @@ + + + + + + diff --git a/src/views/ui-elements/table/TableState.vue b/src/views/ui-elements/table/TableState.vue new file mode 100644 index 0000000..81cdd83 --- /dev/null +++ b/src/views/ui-elements/table/TableState.vue @@ -0,0 +1,171 @@ + + + + + + diff --git a/src/views/ui-elements/table/TableStriped.vue b/src/views/ui-elements/table/TableStriped.vue new file mode 100644 index 0000000..a2d7d95 --- /dev/null +++ b/src/views/ui-elements/table/TableStriped.vue @@ -0,0 +1,171 @@ + + + + + + diff --git a/src/views/uploading.vue b/src/views/uploading.vue new file mode 100644 index 0000000..eb252ae --- /dev/null +++ b/src/views/uploading.vue @@ -0,0 +1,13 @@ + + + + + \ No newline at end of file diff --git a/src/views/variant/GroupVarient.vue b/src/views/variant/GroupVarient.vue new file mode 100644 index 0000000..3574284 --- /dev/null +++ b/src/views/variant/GroupVarient.vue @@ -0,0 +1,175 @@ + + + diff --git a/src/views/variant/VariantAdd.vue b/src/views/variant/VariantAdd.vue new file mode 100644 index 0000000..e10c770 --- /dev/null +++ b/src/views/variant/VariantAdd.vue @@ -0,0 +1,589 @@ + + + + + + + diff --git a/src/views/variant/VariantEdit.vue b/src/views/variant/VariantEdit.vue new file mode 100644 index 0000000..44b93d9 --- /dev/null +++ b/src/views/variant/VariantEdit.vue @@ -0,0 +1,18 @@ + + + + + \ No newline at end of file diff --git a/src/views/variant/VariantList.vue b/src/views/variant/VariantList.vue new file mode 100644 index 0000000..4e1869b --- /dev/null +++ b/src/views/variant/VariantList.vue @@ -0,0 +1,79 @@ + + + diff --git a/src/views/variant/VariantListModel.js b/src/views/variant/VariantListModel.js new file mode 100644 index 0000000..c074a98 --- /dev/null +++ b/src/views/variant/VariantListModel.js @@ -0,0 +1,11 @@ +import XTbl, {Xtc} from '../../components/x-table/index'; + +const tbl = new XTbl('admin/attribute/table', 'لیست صفات'); +tbl.add(new Xtc('title', 'نام صفت').filterText()); +tbl.add(new Xtc('type_str', 'نوع').filterText()); +tbl.add(new Xtc('description', 'توضیحات').filterText()); +tbl.add(new Xtc('multi', 'گروه صفت').filterText().renderSlot('multi')); +tbl.add(new Xtc('opt', 'عملیات').noSort().renderSlot('opt')); + +export default tbl; + diff --git a/tailwind-v0.js b/tailwind-v0.js new file mode 100644 index 0000000..8f9dfff --- /dev/null +++ b/tailwind-v0.js @@ -0,0 +1,868 @@ +/* + +Tailwind - The Utility-First CSS Framework + +A project by Adam Wathan (@adamwathan), Jonathan Reinink (@reinink), +David Hemphill (@davidhemphill) and Steve Schoger (@steveschoger). + +Welcome to the Tailwind config file. This is where you can customize +Tailwind specifically for your project. Don't be intimidated by the +length of this file. It's really just a big JavaScript object and +we've done our very best to explain each section. + +View the full documentation at https://tailwindcss.com. + + +|------------------------------------------------------------------------------- +| The default config +|------------------------------------------------------------------------------- +| +| This variable contains the default Tailwind config. You don't have +| to use it, but it can sometimes be helpful to have available. For +| example, you may choose to merge your custom configuration +| values with some of the Tailwind defaults. +| +*/ + +// let defaultConfig = require('tailwindcss/defaultConfig')() + + +/* +|------------------------------------------------------------------------------- +| Colors https://tailwindcss.com/docs/colors +|------------------------------------------------------------------------------- +| +| Here you can specify the colors used in your project. To get you started, +| we've provided a generous palette of great looking colors that are perfect +| for prototyping, but don't hesitate to change them for your project. You +| own these colors, nothing will break if you change everything about them. +| +| We've used literal color names ("red", "blue", etc.) for the default +| palette, but if you'd rather use functional names like "primary" and +| "secondary", or even a numeric scale like "100" and "200", go for it. +| +*/ + +let colors = { + 'transparent': 'transparent', + 'black': '#22292f', + 'white': '#ffffff', + 'grey': '#b8c2cc', + 'grey-light': '#dae1e7', +} + +module.exports = { + + /* + |----------------------------------------------------------------------------- + | Colors https://tailwindcss.com/docs/colors + |----------------------------------------------------------------------------- + | + | The color palette defined above is also assigned to the "colors" key of + | your Tailwind config. This makes it easy to access them in your CSS + | using Tailwind's config helper. For example: + | + | .error { color: config('colors.red') } + | + */ + + colors: colors, + + + /* + |----------------------------------------------------------------------------- + | Screens https://tailwindcss.com/docs/responsive-design + |----------------------------------------------------------------------------- + | + | Screens in Tailwind are translated to CSS media queries. They define the + | responsive breakpoints for your project. By default Tailwind takes a + | "mobile first" approach, where each screen size represents a minimum + | viewport width. Feel free to have as few or as many screens as you + | want, naming them in whatever way you'd prefer for your project. + | + | Tailwind also allows for more complex screen definitions, which can be + | useful in certain situations. Be sure to see the full responsive + | documentation for a complete list of options. + | + | Class name: .{screen}:{utility} + | + */ + + screens: { + 'sm': '576px', + 'md': '768px', + 'lg': '992px', + 'xl': '1200px', + }, + + + /* + |----------------------------------------------------------------------------- + | Fonts https://tailwindcss.com/docs/fonts + |----------------------------------------------------------------------------- + | + | Here is where you define your project's font stack, or font families. + | Keep in mind that Tailwind doesn't actually load any fonts for you. + | If you're using custom fonts you'll need to import them prior to + | defining them here. + | + | By default we provide a native font stack that works remarkably well on + | any device or OS you're using, since it just uses the default fonts + | provided by the platform. + | + | Class name: .font-{name} + | + */ + + // Set to false in configuration + fonts: { + 'sans': [ + 'system-ui', + 'BlinkMacSystemFont', + '-apple-system', + 'Segoe UI', + 'Roboto', + 'Oxygen', + 'Ubuntu', + 'Cantarell', + 'Fira Sans', + 'Droid Sans', + 'Helvetica Neue', + 'sans-serif', + ], + 'serif': [ + 'Constantia', + 'Lucida Bright', + 'Lucidabright', + 'Lucida Serif', + 'Lucida', + 'DejaVu Serif', + 'Bitstream Vera Serif', + 'Liberation Serif', + 'Georgia', + 'serif', + ], + 'mono': [ + 'Menlo', + 'Monaco', + 'Consolas', + 'Liberation Mono', + 'Courier New', + 'monospace', + ] + }, + + + /* + |----------------------------------------------------------------------------- + | Text sizes https://tailwindcss.com/docs/text-sizing + |----------------------------------------------------------------------------- + | + | Here is where you define your text sizes. Name these in whatever way + | makes the most sense to you. We use size names by default, but + | you're welcome to use a numeric scale or even something else + | entirely. + | + | By default Tailwind uses the "rem" unit type for most measurements. + | This allows you to set a root font size which all other sizes are + | then based on. That said, you are free to use whatever units you + | prefer, be it rems, ems, pixels or other. + | + | Class name: .text-{size} + | + */ + + textSizes: { + 'xs': '.75rem', // 12px + 'sm': '.875rem', // 14px + 'base': '1rem', // 16px + 'lg': '1.125rem', // 18px + 'xl': '1.25rem', // 20px + '2xl': '1.5rem', // 24px + '3xl': '1.875rem', // 30px + '4xl': '2.25rem', // 36px + '5xl': '3rem', // 48px + }, + + + /* + |----------------------------------------------------------------------------- + | Font weights https://tailwindcss.com/docs/font-weight + |----------------------------------------------------------------------------- + | + | Here is where you define your font weights. We've provided a list of + | common font weight names with their respective numeric scale values + | to get you started. It's unlikely that your project will require + | all of these, so we recommend removing those you don't need. + | + | Class name: .font-{weight} + | + */ + + fontWeights: { + 'light': 300, + 'normal': 400, + 'medium': 500, + 'semibold': 600, + 'bold': 700, + 'extrabold': 800, + 'black': 900, + }, + + + /* + |----------------------------------------------------------------------------- + | Leading (line height) https://tailwindcss.com/docs/line-height + |----------------------------------------------------------------------------- + | + | Here is where you define your line height values, or as we call + | them in Tailwind, leadings. + | + | Class name: .leading-{size} + | + */ + + leading: { + 'none': 1, + 'tight': 1.25, + 'normal': 1.5, + 'loose': 2, + }, + + + /* + |----------------------------------------------------------------------------- + | Tracking (letter spacing) https://tailwindcss.com/docs/letter-spacing + |----------------------------------------------------------------------------- + | + | Here is where you define your letter spacing values, or as we call + | them in Tailwind, tracking. + | + | Class name: .tracking-{size} + | + */ + + // set to false in configuration + tracking: { + 'tight': '-0.05em', + 'normal': '0', + 'wide': '0.05em', + }, + + + /* + |----------------------------------------------------------------------------- + | Text colors https://tailwindcss.com/docs/text-color + |----------------------------------------------------------------------------- + | + | Here is where you define your text colors. By default these use the + | color palette we defined above, however you're welcome to set these + | independently if that makes sense for your project. + | + | Class name: .text-{color} + | + */ + + textColors: colors, + + + /* + |----------------------------------------------------------------------------- + | Background colors https://tailwindcss.com/docs/background-color + |----------------------------------------------------------------------------- + | + | Here is where you define your background colors. By default these use + | the color palette we defined above, however you're welcome to set + | these independently if that makes sense for your project. + | + | Class name: .bg-{color} + | + */ + + backgroundColors: colors, + + + /* + |----------------------------------------------------------------------------- + | Background sizes https://tailwindcss.com/docs/background-size + |----------------------------------------------------------------------------- + | + | Here is where you define your background sizes. We provide some common + | values that are useful in most projects, but feel free to add other sizes + | that are specific to your project here as well. + | + | Class name: .bg-{size} + | + */ + + backgroundSize: { + 'auto': 'auto', + 'cover': 'cover', + 'contain': 'contain', + }, + + + /* + |----------------------------------------------------------------------------- + | Border widths https://tailwindcss.com/docs/border-width + |----------------------------------------------------------------------------- + | + | Here is where you define your border widths. Take note that border + | widths require a special "default" value set as well. This is the + | width that will be used when you do not specify a border width. + | + | Class name: .border{-side?}{-width?} + | + */ + + borderWidths: { + default: '1px', + '0': '0', + '2': '2px', + '4': '4px', + '8': '8px', + }, + + + /* + |----------------------------------------------------------------------------- + | Border colors https://tailwindcss.com/docs/border-color + |----------------------------------------------------------------------------- + | + | Here is where you define your border colors. By default these use the + | color palette we defined above, however you're welcome to set these + | independently if that makes sense for your project. + | + | Take note that border colors require a special "default" value set + | as well. This is the color that will be used when you do not + | specify a border color. + | + | Class name: .border-{color} + | + */ + + borderColors: global.Object.assign({ default: colors['grey-light'] }, colors), + + + /* + |----------------------------------------------------------------------------- + | Border radius https://tailwindcss.com/docs/border-radius + |----------------------------------------------------------------------------- + | + | Here is where you define your border radius values. If a `default` radius + | is provided, it will be made available as the non-suffixed `.rounded` + | utility. + | + | If your scale includes a `0` value to reset already rounded corners, it's + | a good idea to put it first so other values are able to override it. + | + | Class name: .rounded{-side?}{-size?} + | + */ + + borderRadius: { + 'none': '0', + 'sm': '.125rem', + default: '.25rem', + 'lg': '.5rem', + 'full': '9999px', + }, + + + /* + |----------------------------------------------------------------------------- + | Width https://tailwindcss.com/docs/width + |----------------------------------------------------------------------------- + | + | Here is where you define your width utility sizes. These can be + | percentage based, pixels, rems, or any other units. By default + | we provide a sensible rem based numeric scale, a percentage + | based fraction scale, plus some other common use-cases. You + | can, of course, modify these values as needed. + | + | + | It's also worth mentioning that Tailwind automatically escapes + | invalid CSS class name characters, which allows you to have + | awesome classes like .w-2/3. + | + | Class name: .w-{size} + | + */ + + width: { + 'auto': 'auto', + 'px': '1px', + '1': '0.25rem', + '2': '0.5rem', + '3': '0.75rem', + '4': '1rem', + '5': '1.25rem', + '6': '1.5rem', + '8': '2rem', + '10': '2.5rem', + '12': '3rem', + '16': '4rem', + '24': '6rem', + '32': '8rem', + '48': '12rem', + '64': '16rem', + '1/2': '50%', + '1/3': '33.33333%', + '2/3': '66.66667%', + '1/4': '25%', + '3/4': '75%', + '1/5': '20%', + '2/5': '40%', + '3/5': '60%', + '4/5': '80%', + '1/6': '16.66667%', + '5/6': '83.33333%', + 'full': '100%', + 'screen': '100vw' + }, + + + /* + |----------------------------------------------------------------------------- + | Height https://tailwindcss.com/docs/height + |----------------------------------------------------------------------------- + | + | Here is where you define your height utility sizes. These can be + | percentage based, pixels, rems, or any other units. By default + | we provide a sensible rem based numeric scale plus some other + | common use-cases. You can, of course, modify these values as + | needed. + | + | Class name: .h-{size} + | + */ + + height: { + 'auto': 'auto', + 'px': '1px', + '1': '0.25rem', + '2': '0.5rem', + '3': '0.75rem', + '4': '1rem', + '5': '1.25rem', + '6': '1.5rem', + '8': '2rem', + '10': '2.5rem', + '12': '3rem', + '16': '4rem', + '24': '6rem', + '32': '8rem', + '48': '12rem', + '64': '16rem', + 'full': '100%', + 'screen': '100vh' + }, + + + /* + |----------------------------------------------------------------------------- + | Minimum width https://tailwindcss.com/docs/min-width + |----------------------------------------------------------------------------- + | + | Here is where you define your minimum width utility sizes. These can + | be percentage based, pixels, rems, or any other units. We provide a + | couple common use-cases by default. You can, of course, modify + | these values as needed. + | + | Class name: .min-w-{size} + | + */ + + minWidth: { + '0': '0', + 'full': '100%', + }, + + + /* + |----------------------------------------------------------------------------- + | Minimum height https://tailwindcss.com/docs/min-height + |----------------------------------------------------------------------------- + | + | Here is where you define your minimum height utility sizes. These can + | be percentage based, pixels, rems, or any other units. We provide a + | few common use-cases by default. You can, of course, modify these + | values as needed. + | + | Class name: .min-h-{size} + | + */ + + minHeight: { + '0': '0', + 'full': '100%', + 'screen': '100vh' + }, + + + /* + |----------------------------------------------------------------------------- + | Maximum width https://tailwindcss.com/docs/max-width + |----------------------------------------------------------------------------- + | + | Here is where you define your maximum width utility sizes. These can + | be percentage based, pixels, rems, or any other units. By default + | we provide a sensible rem based scale and a "full width" size, + | which is basically a reset utility. You can, of course, + | modify these values as needed. + | + | Class name: .max-w-{size} + | + */ + + maxWidth: { + 'xs': '20rem', + 'sm': '30rem', + 'md': '40rem', + 'lg': '50rem', + 'xl': '60rem', + '2xl': '70rem', + '3xl': '80rem', + '4xl': '90rem', + '5xl': '100rem', + 'full': '100%', + }, + + + /* + |----------------------------------------------------------------------------- + | Maximum height https://tailwindcss.com/docs/max-height + |----------------------------------------------------------------------------- + | + | Here is where you define your maximum height utility sizes. These can + | be percentage based, pixels, rems, or any other units. We provide a + | couple common use-cases by default. You can, of course, modify + | these values as needed. + | + | Class name: .max-h-{size} + | + */ + + maxHeight: { + 'full': '100%', + 'screen': '100vh', + }, + + + /* + |----------------------------------------------------------------------------- + | Padding https://tailwindcss.com/docs/padding + |----------------------------------------------------------------------------- + | + | Here is where you define your padding utility sizes. These can be + | percentage based, pixels, rems, or any other units. By default we + | provide a sensible rem based numeric scale plus a couple other + | common use-cases like "1px". You can, of course, modify these + | values as needed. + | + | Class name: .p{side?}-{size} + | + */ + + padding: { + 'px': '1px', + 'base': '2.2rem', + '0': '0', + '1': '0.25rem', + '2': '0.5rem', + '3': '0.75rem', + '4': '1rem', + '5': '1.25rem', + '6': '1.5rem', + '8': '2rem', + '10': '2.5rem', + '12': '3rem', + '16': '4rem', + '20': '5rem', + '24': '6rem', + '32': '8rem', + }, + + + /* + |----------------------------------------------------------------------------- + | Margin https://tailwindcss.com/docs/margin + |----------------------------------------------------------------------------- + | + | Here is where you define your margin utility sizes. These can be + | percentage based, pixels, rems, or any other units. By default we + | provide a sensible rem based numeric scale plus a couple other + | common use-cases like "1px". You can, of course, modify these + | values as needed. + | + | Class name: .m{side?}-{size} + | + */ + + margin: { + 'auto': 'auto', + 'px': '1px', + 'base': '2.2rem', + '0': '0', + '1': '0.25rem', + '2': '0.5rem', + '3': '0.75rem', + '4': '1rem', + '5': '1.25rem', + '6': '1.5rem', + '8': '2rem', + '10': '2.5rem', + '12': '3rem', + '16': '4rem', + '20': '5rem', + '24': '6rem', + '32': '8rem', + }, + + + /* + |----------------------------------------------------------------------------- + | Negative margin https://tailwindcss.com/docs/negative-margin + |----------------------------------------------------------------------------- + | + | Here is where you define your negative margin utility sizes. These can + | be percentage based, pixels, rems, or any other units. By default we + | provide matching values to the padding scale since these utilities + | generally get used together. You can, of course, modify these + | values as needed. + | + | Class name: .-m{side?}-{size} + | + */ + + negativeMargin: { + 'px': '1px', + '0': '0', + '1': '0.25rem', + '2': '0.5rem', + '3': '0.75rem', + '4': '1rem', + }, + + + /* + |----------------------------------------------------------------------------- + | Shadows https://tailwindcss.com/docs/shadows + |----------------------------------------------------------------------------- + | + | Here is where you define your shadow utilities. As you can see from + | the defaults we provide, it's possible to apply multiple shadows + | per utility using comma separation. + | + | If a `default` shadow is provided, it will be made available as the non- + | suffixed `.shadow` utility. + | + | Class name: .shadow-{size?} + | + */ + + shadows: { + default: '0 2px 4px 0 rgba(0,0,0,0.10)', + 'md': '0 4px 8px 0 rgba(0,0,0,0.12), 0 2px 4px 0 rgba(0,0,0,0.08)', + 'lg': '0 15px 30px 0 rgba(0,0,0,0.11), 0 5px 15px 0 rgba(0,0,0,0.08)', + 'inner': 'inset 0 2px 4px 0 rgba(0,0,0,0.06)', + 'outline': '0 0 0 3px rgba(52,144,220,0.5)', + 'none': 'none', + 'drop': '0 2px 8px 0 rgba(0,0,0,0.14)' + }, + + + /* + |----------------------------------------------------------------------------- + | Z-index https://tailwindcss.com/docs/z-index + |----------------------------------------------------------------------------- + | + | Here is where you define your z-index utility values. By default we + | provide a sensible numeric scale. You can, of course, modify these + | values as needed. + | + | Class name: .z-{index} + | + */ + + zIndex: { + 'auto': 'auto', + '0': 0, + '10': 10, + '20': 20, + '30': 30, + '40': 40, + '50': 50, + }, + + + /* + |----------------------------------------------------------------------------- + | Opacity https://tailwindcss.com/docs/opacity + |----------------------------------------------------------------------------- + | + | Here is where you define your opacity utility values. By default we + | provide a sensible numeric scale. You can, of course, modify these + | values as needed. + | + | Class name: .opacity-{name} + | + */ + + opacity: { + '0': '0', + '25': '.25', + '50': '.5', + '75': '.75', + '100': '1', + }, + + + /* + |----------------------------------------------------------------------------- + | SVG fill https://tailwindcss.com/docs/svg + |----------------------------------------------------------------------------- + | + | Here is where you define your SVG fill colors. By default we just provide + | `fill-current` which sets the fill to the current text color. This lets you + | specify a fill color using existing text color utilities and helps keep the + | generated CSS file size down. + | + | Class name: .fill-{name} + | + */ + + svgFill: { + 'current': 'currentColor', + }, + + + /* + |----------------------------------------------------------------------------- + | SVG stroke https://tailwindcss.com/docs/svg + |----------------------------------------------------------------------------- + | + | Here is where you define your SVG stroke colors. By default we just provide + | `stroke-current` which sets the stroke to the current text color. This lets + | you specify a stroke color using existing text color utilities and helps + | keep the generated CSS file size down. + | + | Class name: .stroke-{name} + | + */ + + svgStroke: { + 'current': 'currentColor', + }, + + + /* + |----------------------------------------------------------------------------- + | Modules https://tailwindcss.com/docs/configuration#modules + |----------------------------------------------------------------------------- + | + | Here is where you control which modules are generated and what variants are + | generated for each of those modules. + | + | Currently supported variants: + | - responsive + | - hover + | - focus + | - active + | - group-hover + | + | To disable a module completely, use `false` instead of an array. + | + */ + + modules: { + appearance: ['responsive'], + backgroundAttachment: ['responsive'], + backgroundColors: ['responsive', 'hover', 'focus'], + backgroundPosition: ['responsive'], + backgroundRepeat: ['responsive'], + backgroundSize: ['responsive'], + borderCollapse: [], + borderColors: ['responsive', 'hover'], + borderRadius: [], + borderStyle: ['responsive'], + borderWidths: ['responsive'], + cursor: [], + display: ['responsive'], + flexbox: ['responsive'], + float: ['responsive'], + fonts: false, + fontWeights: ['responsive', 'hover'], + height: ['responsive'], + leading: ['responsive'], + lists: ['responsive'], + margin: ['responsive'], + maxHeight: ['responsive'], + maxWidth: ['responsive'], + minHeight: ['responsive'], + minWidth: ['responsive'], + negativeMargin: ['responsive'], + opacity: ['responsive'], + outline: ['focus'], + overflow: ['responsive'], + padding: ['responsive'], + pointerEvents: ['responsive'], + position: ['responsive'], + resize: ['responsive'], + shadows: ['responsive', 'hover', 'focus'], + svgFill: [], + svgStroke: [], + tableLayout: ['responsive'], + textAlign: ['responsive'], + textColors: ['responsive', 'hover', 'focus'], + textSizes: ['responsive'], + textStyle: ['responsive', 'hover', 'focus'], + tracking: false, + userSelect: ['responsive'], + verticalAlign: ['responsive'], + visibility: ['responsive'], + whitespace: ['responsive'], + width: ['responsive'], + zIndex: ['responsive'], + }, + + + /* + |----------------------------------------------------------------------------- + | Plugins https://tailwindcss.com/docs/plugins + |----------------------------------------------------------------------------- + | + | Here is where you can register any plugins you'd like to use in your + | project. Tailwind's built-in `container` plugin is enabled by default to + | give you a Bootstrap-style responsive container component out of the box. + | + | Be sure to view the complete plugin documentation to learn more about how + | the plugin system works. + | + */ + + plugins: [ + require('tailwindcss/plugins/container')({ + // center: true, + padding: '2.2rem', + }), + ], + + + /* + |----------------------------------------------------------------------------- + | Advanced Options https://tailwindcss.com/docs/configuration#options + |----------------------------------------------------------------------------- + | + | Here is where you can tweak advanced configuration options. We recommend + | leaving these options alone unless you absolutely need to change them. + | + */ + + options: { + prefix: '', + important: true, + separator: ':', + }, + +} diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..8e470e9 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,815 @@ + + +module.exports = { + + important: true, + + + theme: { + + + colors: { + 'transparent': 'transparent', + 'black': '#22292f', + 'white': '#ffffff', + 'grey': '#b8c2cc', + 'grey-light': '#dae1e7', + }, + + + screens: { + 'sm': '576px', + 'md': '768px', + 'lg': '992px', + 'xl': '1200px', + }, + + /* + |----------------------------------------------------------------------------- + | Z-index https://tailwindcss.com/docs/z-index + |----------------------------------------------------------------------------- + | + | Here is where you define your z-index utility values. By default we + | provide a sensible numeric scale. You can, of course, modify these + | values as needed. + | + | Class name: .z-{index} + | + */ + + zIndex: { + 'auto': 'auto', + '0': 0, + '10': 10, + '20': 20, + '30': 30, + '40': 40, + '50': 50, + }, + + /* + |----------------------------------------------------------------------------- + | Fonts https://tailwindcss.com/docs/fonts + |----------------------------------------------------------------------------- + | + | Here is where you define your project's font stack, or font families. + | Keep in mind that Tailwind doesn't actually load any fonts for you. + | If you're using custom fonts you'll need to import them prior to + | defining them here. + | + | By default we provide a native font stack that works remarkably well on + | any device or OS you're using, since it just uses the default fonts + | provided by the platform. + | + | Class name: .font-{name} + | + */ + + // Set to false in configuration + fontFamily: { + 'sans': [ + 'system-ui', + 'BlinkMacSystemFont', + '-apple-system', + 'Segoe UI', + 'Roboto', + 'Oxygen', + 'Ubuntu', + 'Cantarell', + 'Fira Sans', + 'Droid Sans', + 'Helvetica Neue', + 'sans-serif', + ], + 'serif': [ + 'Constantia', + 'Lucida Bright', + 'Lucidabright', + 'Lucida Serif', + 'Lucida', + 'DejaVu Serif', + 'Bitstream Vera Serif', + 'Liberation Serif', + 'Georgia', + 'serif', + ], + 'mono': [ + 'Menlo', + 'Monaco', + 'Consolas', + 'Liberation Mono', + 'Courier New', + 'monospace', + ] + }, + + + /* + |----------------------------------------------------------------------------- + | Text sizes https://tailwindcss.com/docs/text-sizing + |----------------------------------------------------------------------------- + | + | Here is where you define your text sizes. Name these in whatever way + | makes the most sense to you. We use size names by default, but + | you're welcome to use a numeric scale or even something else + | entirely. + | + | By default Tailwind uses the "rem" unit type for most measurements. + | This allows you to set a root font size which all other sizes are + | then based on. That said, you are free to use whatever units you + | prefer, be it rems, ems, pixels or other. + | + | Class name: .text-{size} + | + */ + + fontSize: { + 'xs': '.75rem', // 12px + 'sm': '.875rem', // 14px + 'base': '1rem', // 16px + 'lg': '1.125rem', // 18px + 'xl': '1.25rem', // 20px + '2xl': '1.5rem', // 24px + '3xl': '1.875rem', // 30px + '4xl': '2.25rem', // 36px + '5xl': '3rem', // 48px + '6xl': '4rem', // 64px + }, + + + /* + |----------------------------------------------------------------------------- + | Font weights https://tailwindcss.com/docs/font-weight + |----------------------------------------------------------------------------- + | + | Here is where you define your font weights. We've provided a list of + | common font weight names with their respective numeric scale values + | to get you started. It's unlikely that your project will require + | all of these, so we recommend removing those you don't need. + | + | Class name: .font-{weight} + | + */ + + fontWeight: { + 'light': 300, + 'normal': 400, + 'medium': 500, + 'semibold': 600, + 'bold': 700, + 'extrabold': 800, + 'black': 900, + }, + + + /* + |----------------------------------------------------------------------------- + | Leading (line height) https://tailwindcss.com/docs/line-height + |----------------------------------------------------------------------------- + | + | Here is where you define your line height values, or as we call + | them in Tailwind, leadings. + | + | Class name: .leading-{size} + | + */ + + lineHeight: { + 'none': 1, + 'tight': 1.25, + 'normal': 1.5, + 'loose': 2, + }, + + + /* + |----------------------------------------------------------------------------- + | Tracking (letter spacing) https://tailwindcss.com/docs/letter-spacing + |----------------------------------------------------------------------------- + | + | Here is where you define your letter spacing values, or as we call + | them in Tailwind, tracking. + | + | Class name: .tracking-{size} + | + */ + + // set to false in configuration + letterSpacing: { + 'tight': '-0.05em', + 'normal': '0', + 'wide': '0.05em', + }, + + + /* + |----------------------------------------------------------------------------- + | Text colors https://tailwindcss.com/docs/text-color + |----------------------------------------------------------------------------- + | + | Here is where you define your text colors. By default these use the + | color palette we defined above, however you're welcome to set these + | independently if that makes sense for your project. + | + | Class name: .text-{color} + | + */ + + textColor: theme => ({ + inherit: "inherit", + ...theme('colors'), + }), + + + /* + |----------------------------------------------------------------------------- + | Background colors https://tailwindcss.com/docs/background-color + |----------------------------------------------------------------------------- + | + | Here is where you define your background colors. By default these use + | the color palette we defined above, however you're welcome to set + | these independently if that makes sense for your project. + | + | Class name: .bg-{color} + | + */ + + backgroundColor: theme => theme('colors'), + + + /* + |----------------------------------------------------------------------------- + | Background sizes https://tailwindcss.com/docs/background-size + |----------------------------------------------------------------------------- + | + | Here is where you define your background sizes. We provide some common + | values that are useful in most projects, but feel free to add other sizes + | that are specific to your project here as well. + | + | Class name: .bg-{size} + | + */ + + backgroundSize: { + 'auto': 'auto', + 'cover': 'cover', + 'contain': 'contain', + }, + + + /* + |----------------------------------------------------------------------------- + | Border widths https://tailwindcss.com/docs/border-width + |----------------------------------------------------------------------------- + | + | Here is where you define your border widths. Take note that border + | widths require a special "default" value set as well. This is the + | width that will be used when you do not specify a border width. + | + | Class name: .border{-side?}{-width?} + | + */ + + borderWidth: { + default: '1px', + '0': '0', + '2': '2px', + '4': '4px', + '8': '8px', + }, + + + /* + |----------------------------------------------------------------------------- + | Border colors https://tailwindcss.com/docs/border-color + |----------------------------------------------------------------------------- + | + | Here is where you define your border colors. By default these use the + | color palette we defined above, however you're welcome to set these + | independently if that makes sense for your project. + | + | Take note that border colors require a special "default" value set + | as well. This is the color that will be used when you do not + | specify a border color. + | + | Class name: .border-{color} + | + */ + + borderColor: theme => ({ + default: theme('colors.grey-light'), + ...theme('colors'), + }), + + + /* + |----------------------------------------------------------------------------- + | Border radius https://tailwindcss.com/docs/border-radius + |----------------------------------------------------------------------------- + | + | Here is where you define your border radius values. If a `default` radius + | is provided, it will be made available as the non-suffixed `.rounded` + | utility. + | + | If your scale includes a `0` value to reset already rounded corners, it's + | a good idea to put it first so other values are able to override it. + | + | Class name: .rounded{-side?}{-size?} + | + */ + + borderRadius: { + 'none': '0', + 'sm': '.125rem', + default: '.25rem', + 'lg': '.5rem', + 'full': '9999px', + }, + + + /* + |----------------------------------------------------------------------------- + | Width https://tailwindcss.com/docs/width + |----------------------------------------------------------------------------- + | + | Here is where you define your width utility sizes. These can be + | percentage based, pixels, rems, or any other units. By default + | we provide a sensible rem based numeric scale, a percentage + | based fraction scale, plus some other common use-cases. You + | can, of course, modify these values as needed. + | + | + | It's also worth mentioning that Tailwind automatically escapes + | invalid CSS class name characters, which allows you to have + | awesome classes like .w-2/3. + | + | Class name: .w-{size} + | + */ + + width: { + 'auto': 'auto', + 'px': '1px', + '1': '0.25rem', + '2': '0.5rem', + '3': '0.75rem', + '4': '1rem', + '5': '1.25rem', + '6': '1.5rem', + '8': '2rem', + '10': '2.5rem', + '12': '3rem', + '16': '4rem', + '24': '6rem', + '32': '8rem', + '48': '12rem', + '64': '16rem', + '1/2': '50%', + '1/3': '33.33333%', + '2/3': '66.66667%', + '1/4': '25%', + '3/4': '75%', + '1/5': '20%', + '2/5': '40%', + '3/5': '60%', + '4/5': '80%', + '1/6': '16.66667%', + '5/6': '83.33333%', + '1/12': '8.33333%', + '2/12': '16.66667%', + '3/12': '25%', + '4/12': '33.33333%', + '5/12': '41.66667%', + '6/12': '50%', + '7/12': '58.33333%', + '8/12': '66.66667%', + '9/12': '75%', + '10/12': '83.33333%', + '11/12': '91.66667%', + 'full': '100%', + 'screen': '100vw' + }, + + + /* + |----------------------------------------------------------------------------- + | Height https://tailwindcss.com/docs/height + |----------------------------------------------------------------------------- + | + | Here is where you define your height utility sizes. These can be + | percentage based, pixels, rems, or any other units. By default + | we provide a sensible rem based numeric scale plus some other + | common use-cases. You can, of course, modify these values as + | needed. + | + | Class name: .h-{size} + | + */ + + height: { + 'auto': 'auto', + 'px': '1px', + '1': '0.25rem', + '2': '0.5rem', + '3': '0.75rem', + '4': '1rem', + '5': '1.25rem', + '6': '1.5rem', + '8': '2rem', + '10': '2.5rem', + '12': '3rem', + '16': '4rem', + '24': '6rem', + '32': '8rem', + '48': '12rem', + '64': '16rem', + 'full': '100%', + 'screen': '100vh' + }, + + + /* + |----------------------------------------------------------------------------- + | Minimum width https://tailwindcss.com/docs/min-width + |----------------------------------------------------------------------------- + | + | Here is where you define your minimum width utility sizes. These can + | be percentage based, pixels, rems, or any other units. We provide a + | couple common use-cases by default. You can, of course, modify + | these values as needed. + | + | Class name: .min-w-{size} + | + */ + + minWidth: { + '0': '0', + 'full': '100%', + }, + + + /* + |----------------------------------------------------------------------------- + | Minimum height https://tailwindcss.com/docs/min-height + |----------------------------------------------------------------------------- + | + | Here is where you define your minimum height utility sizes. These can + | be percentage based, pixels, rems, or any other units. We provide a + | few common use-cases by default. You can, of course, modify these + | values as needed. + | + | Class name: .min-h-{size} + | + */ + + minHeight: { + '0': '0', + 'full': '100%', + 'screen': '100vh' + }, + + + /* + |----------------------------------------------------------------------------- + | Maximum width https://tailwindcss.com/docs/max-width + |----------------------------------------------------------------------------- + | + | Here is where you define your maximum width utility sizes. These can + | be percentage based, pixels, rems, or any other units. By default + | we provide a sensible rem based scale and a "full width" size, + | which is basically a reset utility. You can, of course, + | modify these values as needed. + | + | Class name: .max-w-{size} + | + */ + + maxWidth: { + 'xs': '20rem', + 'sm': '30rem', + 'md': '40rem', + 'lg': '50rem', + 'xl': '60rem', + '2xl': '70rem', + '3xl': '80rem', + '4xl': '90rem', + '5xl': '100rem', + 'full': '100%', + }, + + + /* + |----------------------------------------------------------------------------- + | Maximum height https://tailwindcss.com/docs/max-height + |----------------------------------------------------------------------------- + | + | Here is where you define your maximum height utility sizes. These can + | be percentage based, pixels, rems, or any other units. We provide a + | couple common use-cases by default. You can, of course, modify + | these values as needed. + | + | Class name: .max-h-{size} + | + */ + + maxHeight: { + 'full': '100%', + 'screen': '100vh', + }, + + + /* + |----------------------------------------------------------------------------- + | Padding https://tailwindcss.com/docs/padding + |----------------------------------------------------------------------------- + | + | Here is where you define your padding utility sizes. These can be + | percentage based, pixels, rems, or any other units. By default we + | provide a sensible rem based numeric scale plus a couple other + | common use-cases like "1px". You can, of course, modify these + | values as needed. + | + | Class name: .p{side?}-{size} + | + */ + + padding: { + 'px': '1px', + 'base': '2.2rem', + '0': '0', + '1': '0.25rem', + '2': '0.5rem', + '3': '0.75rem', + '4': '1rem', + '5': '1.25rem', + '6': '1.5rem', + '8': '2rem', + '10': '2.5rem', + '12': '3rem', + '16': '4rem', + '20': '5rem', + '24': '6rem', + '32': '8rem', + }, + + + /* + |----------------------------------------------------------------------------- + | Margin https://tailwindcss.com/docs/margin + |----------------------------------------------------------------------------- + | + | Here is where you define your margin utility sizes. These can be + | percentage based, pixels, rems, or any other units. By default we + | provide a sensible rem based numeric scale plus a couple other + | common use-cases like "1px". You can, of course, modify these + | values as needed. + | + | Class name: .m{side?}-{size} + | + */ + + margin: { + 'auto': 'auto', + 'px': '1px', + 'base': '2.2rem', + '0': '0', + '1': '0.25rem', + '2': '0.5rem', + '3': '0.75rem', + '4': '1rem', + '5': '1.25rem', + '6': '1.5rem', + '8': '2rem', + '10': '2.5rem', + '12': '3rem', + '16': '4rem', + '20': '5rem', + '24': '6rem', + '32': '8rem', + '-px': '-1px', + '-1': '-0.25rem', + '-2': '-0.5rem', + '-3': '-0.75rem', + '-4': '-1rem', + }, + + order: { + first: '-1', + last: '999', + normal: '0', + '1': '1', + '2': '2', + '3': '3', + '4': '4', + '5': '5', + '6': '6', + }, + + container: { + center: true, + padding: '1rem', + }, + + + /* + |----------------------------------------------------------------------------- + | Shadows https://tailwindcss.com/docs/shadows + |----------------------------------------------------------------------------- + | + | Here is where you define your shadow utilities. As you can see from + | the defaults we provide, it's possible to apply multiple shadows + | per utility using comma separation. + | + | If a `default` shadow is provided, it will be made available as the non- + | suffixed `.shadow` utility. + | + | Class name: .shadow-{size?} + | + */ + + boxShadow: { + default: '0 2px 4px 0 rgba(0,0,0,0.10)', + 'md': '0 4px 8px 0 rgba(0,0,0,0.12), 0 2px 4px 0 rgba(0,0,0,0.08)', + 'lg': '0 15px 30px 0 rgba(0,0,0,0.11), 0 5px 15px 0 rgba(0,0,0,0.08)', + 'inner': 'inset 0 2px 4px 0 rgba(0,0,0,0.06)', + 'xl': '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)', + '2xl': '0 25px 50px -12px rgba(0, 0, 0, 0.25)', + 'outline': '0 0 0 3px rgba(52,144,220,0.5)', + 'none': 'none', + 'drop': '0 2px 8px 0 rgba(0,0,0,0.14)' + }, + + + /* + |----------------------------------------------------------------------------- + | Opacity https://tailwindcss.com/docs/opacity + |----------------------------------------------------------------------------- + | + | Here is where you define your opacity utility values. By default we + | provide a sensible numeric scale. You can, of course, modify these + | values as needed. + | + | Class name: .opacity-{name} + | + */ + + // NOTE: IF YOU WANT TO CUSTOMIZE OPACITY THAN UNCOMMENT BELOW OBJECT AND EDIT + // ELSE JUST REMOVE IT OR COMMENT IT FOR LATER CUSTOMIZATION + // opacity: { + // '0': '0', + // '25': '.25', + // '50': '.5', + // '75': '.75', + // '100': '1', + // }, + + + /* + |----------------------------------------------------------------------------- + | SVG fill https://tailwindcss.com/docs/svg + |----------------------------------------------------------------------------- + | + | Here is where you define your SVG fill colors. By default we just provide + | `fill-current` which sets the fill to the current text color. This lets you + | specify a fill color using existing text color utilities and helps keep the + | generated CSS file size down. + | + | Class name: .fill-{name} + | + */ + + fill: { + 'current': 'currentColor', + }, + + + /* + |----------------------------------------------------------------------------- + | SVG stroke https://tailwindcss.com/docs/svg + |----------------------------------------------------------------------------- + | + | Here is where you define your SVG stroke colors. By default we just provide + | `stroke-current` which sets the stroke to the current text color. This lets + | you specify a stroke color using existing text color utilities and helps + | keep the generated CSS file size down. + | + | Class name: .stroke-{name} + | + */ + + stroke: { + 'current': 'currentColor', + }, + }, + + + /* + |----------------------------------------------------------------------------- + | variants https://tailwindcss.com/docs/configuration#modules + |----------------------------------------------------------------------------- + | + | Here is where you control which modules are generated and what variants are + | generated for each of those modules. + | + | Currently supported variants: + | - responsive + | - hover + | - focus + | - active + | - group-hover + | + | To disable a module completely, use `false` instead of an array. + | + */ + + variants: { + appearance: ['responsive'], + backgroundAttachment: ['responsive'], + backgroundColor: ['responsive', 'hover', 'focus'], + // backgroundPosition: ['responsive'], + // backgroundRepeat: ['responsive'], + backgroundSize: ['responsive'], + borderCollapse: [], + borderColor: ['responsive', 'hover'], + borderRadius: [], + borderStyle: ['responsive'], + borderWidth: ['responsive'], + cursor: [], + display: ['responsive'], + flexDirection: ['responsive'], + flexWrap: ['responsive'], + alignItems: ['responsive'], + alignSelf: ['responsive'], + justifyContent: ['responsive'], + alignContent: ['responsive'], + flex: ['responsive'], + flexGrow: ['responsive'], + flexShrink: ['responsive'], + float: ['responsive'], + fontWeight: ['responsive', 'hover'], + height: ['responsive'], + lineHeight: ['responsive'], + listStylePosition: ['responsive'], + // listStyleType: ['responsive'], + margin: ['responsive'], + maxHeight: ['responsive'], + maxWidth: ['responsive'], + minHeight: ['responsive'], + minWidth: ['responsive'], + negativeMargin: ['responsive'], + opacity: ['responsive'], + outline: ['focus'], + overflow: ['responsive'], + order: ['responsive', 'hover', 'focus'], + padding: ['responsive'], + pointerEvents: ['responsive'], + position: ['responsive'], + inset: ['responsive'], + resize: ['responsive'], + boxShadow: ['responsive', 'hover', 'focus'], + fill: [], + stroke: [], + tableLayout: ['responsive'], + textAlign: ['responsive'], + textColor: ['responsive', 'hover', 'focus'], + fontSize: ['responsive'], + fontStyle: ['responsive', 'hover', 'focus'], + fontSmoothing: ['responsive', 'hover', 'focus'], + textDecoration: ['responsive', 'hover', 'focus'], + textTransform: ['responsive', 'hover', 'focus'], + userSelect: ['responsive'], + verticalAlign: ['responsive'], + visibility: ['responsive'], + whitespace: ['responsive'], + wordBreak: ['responsive'], + width: ['responsive'], + zIndex: ['responsive'], + }, + + + /* + |----------------------------------------------------------------------------- + | Plugins https://tailwindcss.com/docs/plugins + |----------------------------------------------------------------------------- + | + | Here is where you can register any plugins you'd like to use in your + | project. Tailwind's built-in `container` plugin is enabled by default to + | give you a Bootstrap-style responsive container component out of the box. + | + | Be sure to view the complete plugin documentation to learn more about how + | the plugin system works. + | + */ + + plugins: [], + + corePlugins: { + fontFamily: false, + letterSpacing: false, + backgroundPosition: false, + backgroundRepeat: false, + listStyleType: false, + } + +} +/* eslint-enable */ diff --git a/themeConfig.js b/themeConfig.js new file mode 100644 index 0000000..63e01ca --- /dev/null +++ b/themeConfig.js @@ -0,0 +1,44 @@ +/*========================================================================================= + File Name: themeConfig.js + Description: Theme configuration + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: hhttp://www.themeforest.net/user/pixinvent +==========================================================================================*/ + +// MAIN COLORS - VUESAX THEME COLORS +export const colors = { + primary : '#1DA57A', + // primary : '#7367F0', + success : '#28C76F', + danger : '#EA5455', + warning : '#FF9F43', + dark : '#1E1E1E' +} + +// CONFIGS +const themeConfig = { + disableCustomizer : false, // options[Boolean] : true, false(default) + disableThemeTour : true, // options[Boolean] : true, false(default) + footerType : 'hidden', // options[String] : static(default) / sticky / hidden + hideScrollToTop : false, // options[Boolean] : true, false(default) + mainLayoutType : 'vertical', // options[String] : vertical(default) / horizontal + navbarColor : '#fff', // options[String] : HEX color / rgb / rgba / Valid HTML Color name - (default: #fff) + navbarType : 'floating', // options[String] : floating(default) / static / sticky / hidden + routerTransition : 'zoom-fade', // options[String] : zoom-fade / slide-fade / fade-bottom / fade / zoom-out / none(default) + rtl : true, // options[Boolean] : true, false(default) + sidebarCollapsed : false, // options[Boolean] : true, false(default) + theme : 'light', // options[String] : "light"(default), "dark", "semi-dark" + + // Not required yet - WIP + userInfoLocalStorageKey: 'userInfo' + + // NOTE: themeTour will be disabled in screens < 1200. Please refer docs for more info. +} + +import Vue from 'vue' +import Vuesax from 'vuesax' +Vue.use(Vuesax, { theme:{ colors }, rtl: themeConfig.rtl }) + +export default themeConfig diff --git a/vue.config.js b/vue.config.js new file mode 100644 index 0000000..eaa2ac7 --- /dev/null +++ b/vue.config.js @@ -0,0 +1,53 @@ +/*========================================================================================= + File Name: vue.config.js + Description: configuration file of vue + ---------------------------------------------------------------------------------------- + Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template + Author: Pixinvent + Author URL: http://www.themeforest.net/user/pixinvent +==========================================================================================*/ + + +module.exports = { + publicPath: 'customer/', + outputDir: 'dist/export', + transpileDependencies: [ + 'vue-echarts', + 'resize-detector' + ], + configureWebpack: { + module: { + rules: [ + + { + test: /\.less$/, + loader: 'less-loader', + options: { + lessOptions: { // If you are using less-loader@5 please spread the lessOptions to options directly + modifyVars: { + 'primary-color': '#1DA57A', + 'link-color': '#1DA57A', + 'border-radius-base': '6px', + }, + javascriptEnabled: true, + }, + }, + }, + ], + }, + optimization: { + splitChunks: { + chunks: 'all' + }, + + } + } + // devServer: { + // overlay: { + // warnings: true, + // errors: true + // } + // } +} + +