@ -0,0 +1,2 @@ | |||
> 1% | |||
last 2 versions |
@ -0,0 +1,5 @@ | |||
[*.{js,jsx,ts,tsx,vue}] | |||
indent_style = space | |||
indent_size = 2 | |||
trim_trailing_whitespace = true | |||
insert_final_newline = true |
@ -0,0 +1,2 @@ | |||
VUE_APP_I18N_LOCALE=en | |||
VUE_APP_I18N_FALLBACK_LOCALE=en |
@ -0,0 +1,14 @@ | |||
module.exports = { | |||
root: true, | |||
env: { | |||
node: true, | |||
}, | |||
extends: 'vuetify', | |||
rules: { | |||
'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off', | |||
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', | |||
}, | |||
parserOptions: { | |||
parser: 'babel-eslint', | |||
}, | |||
} |
@ -0,0 +1,25 @@ | |||
.DS_Store | |||
node_modules | |||
/dist | |||
package-lock.json | |||
/tests/e2e/videos/ | |||
/tests/e2e/screenshots/ | |||
# local env files | |||
.env.local | |||
.env.*.local | |||
# Log files | |||
npm-debug.log* | |||
yarn-debug.log* | |||
yarn-error.log* | |||
# Editor directories and files | |||
.idea | |||
.vscode | |||
*.suo | |||
*.ntvs* | |||
*.njsproj | |||
*.sln | |||
*.sw? |
@ -0,0 +1,7 @@ | |||
# Change Log | |||
## [2.1.0] 2020-02-29 | |||
- refactor: all the product was changed and now it's the same version with PRO version and also the structure it's the same | |||
## [1.0.0] 2018-10-16 | |||
### Initial Release |
@ -0,0 +1,13 @@ | |||
<!-- | |||
IMPORTANT: Please use the following link to create a new issue: | |||
https://www.creative-tim.com/new-issue/vuetify-material-dashboard | |||
**If your issue was not created using the app above, it will be closed immediately.** | |||
--> | |||
<!-- | |||
Love Creative Tim? Do you need Angular, React, Vuejs or HTML? You can visit: | |||
👉 https://www.creative-tim.com/bundles | |||
👉 https://www.creative-tim.com | |||
--> |
@ -0,0 +1,9 @@ | |||
MIT License | |||
Copyright (c) 2019 [Creative Tim](https://www.creative-tim.com) | |||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: | |||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. | |||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
@ -1,3 +1,250 @@ | |||
# vuetify-demo | |||
# [Vuetify Material Dashboard](https://www.creative-tim.com/product/vuetify-material-dashboard?ref=vtymdp-readme) [](https://twitter.com/share?url=https%3A%2F%2Fwww.creative-tim.com%2Fvuetify-material-dashboard&text=Vuetify%20Material%20Dashboard%20PRO%20by%20Creative%20Tim&via=CreativeTim&hashtags=vuejs%20%23vuex%20%23vuetify%20%23material) | |||
vuetify 免费演示站 | |||
 [](https://github.com/creativetimofficial/ct-vuetify-material-dashboard/issues?q=is%3Aopen+is%3Aissue) [](https://github.com/creativetimofficial/ct-vuetify-material-dashboard/issues?q=is%3Aissue+is%3Aclosed) [](https://gitter.im/creative-tim/material-dashboard) [](https://discord.gg/E4aHAQy) | |||
 | |||
**Vuetify Material Dashboard** is a beautiful resource built over [Vuetify](https://vuetifyjs.com/en/), [Vuex](https://vuex.vuejs.org/installation.html) and [Vuejs](https://vuejs.org/). It will help you get started developing dashboards in no time. Vuetify Material Dashboard is the official Vuejs version of the Original [Material Dashboard PRO](https://www.creative-tim.com/product/material-dashboard). Using the Dashboard is pretty simple but requires basic knowledge of Javascript, [Vuejs](https://vuejs.org/v2/guide/) and [Vue-Router](https://router.vuejs.org/en/). | |||
We have created it thinking about things you actually need in a dashboard. **Vuetify Material Dashboard** contains handpicked and optimized Vuejs plugins. Everything is designed to fit with one another. As you will be able to see, the dashboard you can access on [Creative Tim](https://www.creative-tim.com) is a customization of this product. | |||
**Vuetify** is developed exactly according to Material Design spec. Every component is handcrafted to bring you the best possible UI tools to your next great app. The development doesn't stop at the core components outlined in Google's spec. Through the support of community members and sponsors, additional components will be designed and made available for everyone to enjoy. | |||
**Vuex** is a state management pattern + library for **Vue.js** applications. It serves as a centralized store for all the components in an application, with rules ensuring that the state can only be mutated in a predictable fashion. It also integrates with Vue's official devtools extension to provide advanced features such as zero-config time-travel debugging and state snapshot export/import. | |||
Let us know what you think and what we can improve below. And good luck with development! | |||
## Getting Started | |||
- Install Nodejs from [Nodejs Official Page](https://nodejs.org/en/) | |||
- Open your terminal | |||
- Navigate to the project | |||
- Run `npm install` or `yarn install` if you use [Yarn](https://yarnpkg.com/en/) | |||
- Run `npm run dev` or `yarn serve` to start a local development server | |||
- A new tab will be opened in your browser | |||
You can also run additional npm tasks such as | |||
- `npm run build` to build your app for production | |||
- `npm run lint` to run linting. | |||
## Vuetify | |||
Vuetify is developed exactly according to Material Design spec. Every component is hand crafted to bring you the best possible UI tools to your next great app. The development doesn't stop at the core components outlined in Google's spec. Through the support of community members and sponsors, additional components will be designed and made available for everyone to enjoy. | |||
## Vuex | |||
Vuex is a state management pattern + library for Vue.js applications. It serves as a centralized store for all the components in an application, with rules ensuring that the state can only be mutated in a predictable fashion. It also integrates with Vue's official [devtools](https://github.com/vuejs/vue-devtools) extension to provide advanced features such as zero-config time-travel debugging and state snapshot export / import. | |||
## Vue-cli | |||
We used the latest 3.x [Vue CLI](https://github.com/vuejs/vue-cli) which aims to reduce project configuration | |||
to as little as possible. Almost everything is inside `package.json` + some other related files such as | |||
`.babel.config.js`, `.eslintrc.js` and `.postcssrc.js`. | |||
Let us know what you think and what we can improve below. And good luck with development! | |||
#### Special thanks | |||
During the development of this dashboard, we have used many existing resources from awesome developers. We want to thank them for providing their tools open source: | |||
- [Vuetify](https://vuetifyjs.com/en/) for the wonderful framework | |||
Let us know your thoughts below. And good luck with development! | |||
## Table of Contents | |||
* [Versions](#versions) | |||
* [Demo](#demo) | |||
* [Quick Start](#quick-start) | |||
* [Documentation](#documentation) | |||
* [File Structure](#file-structure) | |||
* [Browser Support](#browser-support) | |||
* [Resources](#resources) | |||
* [Reporting Issues](#reporting-issues) | |||
* [Technical Support or Questions](#technical-support-or-questions) | |||
* [Licensing](#licensing) | |||
* [Useful Links](#useful-links) | |||
## Versions | |||
[<img src="https://pbs.twimg.com/profile_images/900908683927982080/GWykKJ7r_400x400.jpg" width="60" height="60" />](https://www.creative-tim.com/product/vuetify-material-dashboard-pro?ref=vtymdp-readme) | |||
[<img src="https://s3.amazonaws.com/creativetim_bucket/github/html.png" width="60" height="60" />](https://www.creative-tim.com/product/material-dashboard-pro?ref=vtymdp-readme) | |||
[<img src="https://s3.amazonaws.com/creativetim_bucket/github/react.svg" width="60" height="60" />](https://www.creative-tim.com/product/material-dashboard-pro-react?ref=vtymdp-readme) | |||
[<img src="https://s3.amazonaws.com/creativetim_bucket/github/vuejs.png" width="60" height="60" />](https://www.creative-tim.com/product/vue-material-dashboard-pro?ref=vtymdp-readme) | |||
[<img src="https://s3.amazonaws.com/creativetim_bucket/github/angular.png" width="60" height="60" />](https://www.creative-tim.com/product/material-dashboard-pro-angular2?ref=vtymdp-readme) | |||
Vuetify | Vue | React | Angular | HTML | | |||
| --- | --- | --- | --- | --- | | |||
| [](https://www.creative-tim.com/product/vuetify-material-dashboard-pro?ref=vtymdp-readme) | [](https://www.creative-tim.com/product/vue-material-dashboard-pro?ref=vtymdp-readme) | [](https://www.creative-tim.com/product/material-dashboard-pro-react?ref=vtymdp-readme) | [](https://www.creative-tim.com/product/material-dashboard-angular2?ref=vtymdp-readme) | [](https://www.creative-tim.com/product/material-dashboard-pro/examples/dashboard.html?ref=vtymdp-readme) | |||
## Demo | |||
- [Start page](https://demos.creative-tim.com/vuetify-material-dashboard?ref=vtymdp-readme) | |||
- [Notifications page](https://demos.creative-tim.com/vuetify-material-dashboard/#/components/notifications?ref=vtymdp-readme) | |||
[View More](https://demos.creative-tim.com/vuetify-material-dashboard-pro?ref=vtymdp-readme). | |||
## Quick start | |||
Quick start options: | |||
- Download from [Creative Tim](https://www.creative-tim.com/product/vuetify-material-dashboard?ref=vtymdp-readme) | |||
## Documentation | |||
The documentation for the **Vuetify Material Dashboard** is hosted on vuetify [website](https://vuetifyjs.com/en/components/api-explorer). | |||
## File Structure | |||
Within the download you'll find the following directories and files: | |||
``` | |||
vuetify-material-dashboard | |||
├── README.md | |||
├── CHANGELOG.md | |||
├── babel.config.js | |||
├── cypress.json | |||
├── jest.config.js | |||
├── now.json | |||
├── package.json | |||
├── postcss.config.js | |||
├── public | |||
│ ├── favicon.ico | |||
│ └── index.html | |||
├── src | |||
│ ├── App.vue | |||
│ ├── assets | |||
│ │ └── vuetify.svg | |||
│ ├── components | |||
│ │ └── base | |||
│ │ ├── Card.vue | |||
│ │ ├── Item.vue | |||
│ │ ├── ItemGroup.vue | |||
│ │ ├── ItemSubGroup.vue | |||
│ │ ├── MaterialAlert.vue | |||
│ │ ├── MaterialCard.vue | |||
│ │ ├── MaterialChartCard.vue | |||
│ │ ├── MaterialSnackbar.vue | |||
│ │ ├── MaterialStatsCard.vue | |||
│ │ ├── MaterialTabs.vue | |||
│ │ ├── MaterialTestimony.vue | |||
│ │ ├── Subheading.vue | |||
│ │ └── VComponent.vue | |||
│ ├── i18n.js | |||
│ ├── locales | |||
│ │ └── en.json | |||
│ ├── main.js | |||
│ ├── plugins | |||
│ │ ├── base.js | |||
│ │ ├── chartist.js | |||
│ │ ├── vee-validate.js | |||
│ │ └── vuetify.js | |||
│ ├── router.js | |||
│ ├── sass | |||
│ │ ├── main.scss | |||
│ │ ├── overrides.sass | |||
│ │ └── vuetify-material | |||
│ │ └── _sidebar.sass | |||
│ ├── store.js | |||
│ └── views | |||
│ └── dashboard | |||
│ ├── Charts.vue | |||
│ ├── Dashboard.vue | |||
│ ├── Index.vue | |||
│ ├── Widgets.vue | |||
│ ├── component | |||
│ │ ├── Buttons.vue | |||
│ │ ├── Grid.vue | |||
│ │ ├── Icons.vue | |||
│ │ ├── Notifications.vue | |||
│ │ ├── Tabs.vue | |||
│ │ └── Typography.vue | |||
│ ├── components | |||
│ │ └── core | |||
│ │ ├── AppBar.vue | |||
│ │ ├── Drawer.vue | |||
│ │ ├── Footer.vue | |||
│ │ ├── Settings.vue | |||
│ │ └── View.vue | |||
│ ├── maps | |||
│ │ └── GoogleMaps.vue | |||
│ ├── pages | |||
│ │ └── UserProfile.vue | |||
│ └── tables | |||
│ └── RegularTables.vue | |||
├── tests | |||
│ ├── e2e | |||
│ │ ├── plugins | |||
│ │ │ └── index.js | |||
│ │ ├── specs | |||
│ │ │ └── test.js | |||
│ │ └── support | |||
│ │ ├── commands.js | |||
│ │ └── index.js | |||
│ └── unit | |||
│ └── example.spec.js | |||
├── vue.config.js | |||
``` | |||
## Browser Support | |||
At present, we officially aim to support the last two versions of the following browsers: | |||
<img src="https://s3.amazonaws.com/creativetim_bucket/github/browser/chrome.png" width="64" height="64"> <img src="https://s3.amazonaws.com/creativetim_bucket/github/browser/firefox.png" width="64" height="64"> <img src="https://s3.amazonaws.com/creativetim_bucket/github/browser/edge.png" width="64" height="64"> <img src="https://s3.amazonaws.com/creativetim_bucket/github/browser/safari.png" width="64" height="64"> <img src="https://s3.amazonaws.com/creativetim_bucket/github/browser/opera.png" width="64" height="64"> | |||
## Resources | |||
- [Live Preview](https://demos.creative-tim.com/vuetify-material-dashboard?ref=vtymdp-readme) | |||
- Download Page: [Download](https://www.creative-tim.com/product/vuetify-material-dashboard?ref=vtymdp-readme) | |||
- Documentation is [Here](https://vuetifyjs.com/en/components/api-explorer) | |||
- License Agreement: [License](https://www.creative-tim.com/license) | |||
- Support: [Contact](https://www.creative-tim.com/contact-us) | |||
- Issues: [Github Issues Page](https://github.com/creativetimofficial/ct-vuetify-material-dashboard/issues) | |||
- Vue Material Dashboard PRO - [Demo](https://www.creative-tim.com/product/vue-material-dashboard-pro?ref=vtymdp-readme) | |||
- For Front End Development - [Material Kit Pro ](https://www.creative-tim.com/product/material-kit-pro?ref=vtymdp-readme) | |||
## Reporting Issues | |||
We use GitHub Issues as the official bug tracker for the **Vuetify Material Dashboard**. Here are some advices for our users that want to report an issue: | |||
1. Make sure that you are using the latest version of the **Vuetify Material Dashboard**. Check the **CHANGELOG** from your dashboard on our [website](https://www.creative-tim.com/). | |||
2. Providing us reproducible steps for the issue will shorten the time it takes for it to be fixed. | |||
3. Some issues may be browser specific, so specifying in what browser you encountered the issue might help. | |||
## Technical Support or Questions | |||
If you have questions or need help integrating the product please [contact us](https://www.creative-tim.com/contact-us) instead of opening an issue. | |||
## Licensing | |||
- Copyright 2018 Creative Tim (https://www.creative-tim.com) | |||
- Creative Tim [license](https://www.creative-tim.com/license) | |||
## Useful Links | |||
- [More products](https://www.creative-tim.com/bootstrap-themes) from Creative Tim | |||
- [Vue products](https://www.creative-tim.com/bootstrap-themes/vuejs-themes) from Creative Tim | |||
- [Tutorials](https://www.youtube.com/channel/UCVyTG4sCw-rOvB9oHkzZD1w) | |||
- [Freebies](https://www.creative-tim.com/bootstrap-themes/free) from Creative Tim | |||
- [Affiliate Program](https://www.creative-tim.com/affiliates/new) (earn money) | |||
##### Social Media | |||
Twitter: <https://twitter.com/CreativeTim> | |||
Facebook: <https://www.facebook.com/CreativeTim> | |||
Dribbble: <https://dribbble.com/creativetim> | |||
Google+: <https://plus.google.com/+CreativetimPage> | |||
Instagram: <https://instagram.com/creativetimofficial> |
@ -0,0 +1,5 @@ | |||
module.exports = { | |||
presets: [ | |||
'@vue/app', | |||
], | |||
} |
@ -0,0 +1,3 @@ | |||
{ | |||
"pluginsFile": "tests/e2e/plugins/index.js" | |||
} |
@ -0,0 +1,30 @@ | |||
module.exports = { | |||
moduleFileExtensions: [ | |||
'js', | |||
'jsx', | |||
'json', | |||
'vue', | |||
], | |||
transform: { | |||
'^.+\\.vue$': 'vue-jest', | |||
'.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$': 'jest-transform-stub', | |||
'^.+\\.jsx?$': 'babel-jest', | |||
}, | |||
transformIgnorePatterns: [ | |||
'/node_modules/', | |||
], | |||
moduleNameMapper: { | |||
'^@/(.*)$': '<rootDir>/src/$1', | |||
}, | |||
snapshotSerializers: [ | |||
'jest-serializer-vue', | |||
], | |||
testMatch: [ | |||
'**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)', | |||
], | |||
testURL: 'http://localhost/', | |||
watchPlugins: [ | |||
'jest-watch-typeahead/filename', | |||
'jest-watch-typeahead/testname', | |||
], | |||
} |
@ -0,0 +1,3 @@ | |||
{ | |||
"version": 2 | |||
} |
@ -0,0 +1,47 @@ | |||
{ | |||
"name": "vuetify-material-dashboard", | |||
"version": "2.1.0", | |||
"private": true, | |||
"scripts": { | |||
"dev": "vue-cli-service serve --open", | |||
"serve": "vue-cli-service serve", | |||
"build": "vue-cli-service build", | |||
"lint": "vue-cli-service lint", | |||
"i18n:report": "vue-cli-service i18n:report --src './src/**/*.?(js|vue)' --locales './src/locales/**/*.json'", | |||
"now-start": "vue-cli-service serve", | |||
"test:e2e": "vue-cli-service test:e2e", | |||
"test:unit": "vue-cli-service test:unit" | |||
}, | |||
"dependencies": { | |||
"core-js": "^3.6.2", | |||
"vue": "^2.6.11", | |||
"vue-i18n": "^8.15.3", | |||
"vue-router": "^3.1.3", | |||
"vuetify": "^2.2.11", | |||
"vuex": "^3.1.2" | |||
}, | |||
"devDependencies": { | |||
"@vue/cli-plugin-babel": "^4.1.2", | |||
"@vue/cli-plugin-e2e-cypress": "^4.1.2", | |||
"@vue/cli-plugin-eslint": "^4.1.2", | |||
"@vue/cli-plugin-unit-jest": "^4.1.2", | |||
"@vue/cli-service": "^4.1.2", | |||
"@vue/eslint-config-standard": "^5.0.1", | |||
"@vue/test-utils": "1.0.0-beta.30", | |||
"babel-core": "7.0.0-bridge.0", | |||
"babel-eslint": "^10.0.3", | |||
"babel-jest": "^24.9.0", | |||
"eslint": "^6.8.0", | |||
"eslint-config-vuetify": "^0.4.1", | |||
"eslint-plugin-vue": "^6.1.2", | |||
"sass": "^1.24.3", | |||
"sass-loader": "^8.0.0", | |||
"vee-validate": "^3.2.2", | |||
"vue-chartist": "^2.2.1", | |||
"vue-cli-plugin-i18n": "^0.6.0", | |||
"vue-cli-plugin-vuetify": "^2.0.3", | |||
"vue-template-compiler": "^2.6.11", | |||
"vue-world-map": "^0.1.1", | |||
"vuetify-loader": "^1.4.3" | |||
} | |||
} |
@ -0,0 +1,5 @@ | |||
module.exports = { | |||
plugins: { | |||
autoprefixer: {}, | |||
}, | |||
} |
@ -0,0 +1,36 @@ | |||
<!-- | |||
========================================================= | |||
* Vuetify Material Dashboard - v2.1.0 | |||
========================================================= | |||
* Product Page: https://www.creative-tim.com/product/vuetify-material-dashboard | |||
* Copyright 2019 Creative Tim (https://www.creative-tim.com) | |||
* Coded by Creative Tim | |||
========================================================= | |||
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. | |||
--> | |||
<!DOCTYPE html> | |||
<html lang="en"> | |||
<head> | |||
<meta charset="utf-8"> | |||
<meta http-equiv="X-UA-Compatible" content="IE=edge"> | |||
<meta name="viewport" content="width=device-width,initial-scale=1.0"> | |||
<link rel="icon" href="<%= BASE_URL %>favicon.png"> | |||
<title>Vuetify Material Dashboard - by Creative Tim</title> | |||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900"> | |||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@mdi/font@latest/css/materialdesignicons.min.css"> | |||
</head> | |||
<body> | |||
<noscript> | |||
<strong>We're sorry but material doesn't work properly without JavaScript enabled. Please enable it to continue.</strong> | |||
</noscript> | |||
<div id="app"></div> | |||
<!-- built files will be auto injected --> | |||
</body> | |||
</html> |
@ -0,0 +1,9 @@ | |||
<template> | |||
<router-view /> | |||
</template> | |||
<script> | |||
export default { | |||
name: 'App', | |||
} | |||
</script> |
@ -0,0 +1 @@ | |||
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 87.5 100"><defs><style>.cls-1{fill:#1697f6;}.cls-2{fill:#7bc6ff;}.cls-3{fill:#aeddff;}</style></defs><title>Artboard 47</title><polyline class="cls-1" points="43.75 0 23.31 0 43.75 48.32"/><polygon class="cls-2" points="43.75 62.5 43.75 100 0 14.58 22.92 14.58 43.75 62.5"/><polyline class="cls-2" points="43.75 0 64.19 0 43.75 48.32"/><polygon class="cls-3" points="64.58 14.58 87.5 14.58 43.75 100 43.75 62.5 64.58 14.58"/></svg> |
@ -0,0 +1,9 @@ | |||
<script> | |||
import { VCard } from 'vuetify/lib' | |||
export default { | |||
name: 'Card', | |||
extends: VCard, | |||
} | |||
</script> |
@ -0,0 +1,69 @@ | |||
<template> | |||
<v-list-item | |||
:href="href" | |||
:rel="href && href !== '#' ? 'noopener' : undefined" | |||
:target="href && href !== '#' ? '_blank' : undefined" | |||
:to="item.to" | |||
:active-class="`primary ${!isDark ? 'black' : 'white'}--text`" | |||
> | |||
<v-list-item-icon | |||
v-if="text" | |||
class="v-list-item__icon--text" | |||
v-text="computedText" | |||
/> | |||
<v-list-item-icon v-else-if="item.icon"> | |||
<v-icon v-text="item.icon" /> | |||
</v-list-item-icon> | |||
<v-list-item-content v-if="item.title || item.subtitle"> | |||
<v-list-item-title v-text="item.title" /> | |||
<v-list-item-subtitle v-text="item.subtitle" /> | |||
</v-list-item-content> | |||
</v-list-item> | |||
</template> | |||
<script> | |||
import Themeable from 'vuetify/lib/mixins/themeable' | |||
export default { | |||
name: 'Item', | |||
mixins: [Themeable], | |||
props: { | |||
item: { | |||
type: Object, | |||
default: () => ({ | |||
href: undefined, | |||
icon: undefined, | |||
subtitle: undefined, | |||
title: undefined, | |||
to: undefined, | |||
}), | |||
}, | |||
text: { | |||
type: Boolean, | |||
default: false, | |||
}, | |||
}, | |||
computed: { | |||
computedText () { | |||
if (!this.item || !this.item.title) return '' | |||
let text = '' | |||
this.item.title.split(' ').forEach(val => { | |||
text += val.substring(0, 1) | |||
}) | |||
return text | |||
}, | |||
href () { | |||
return this.item.href || (!this.item.to ? '#' : undefined) | |||
}, | |||
}, | |||
} | |||
</script> |
@ -0,0 +1,124 @@ | |||
<template> | |||
<v-list-group | |||
:group="group" | |||
:prepend-icon="item.icon" | |||
:sub-group="subGroup" | |||
append-icon="mdi-menu-down" | |||
:color="barColor !== 'rgba(255, 255, 255, 1), rgba(255, 255, 255, 0.7)' ? 'white' : 'grey darken-1'" | |||
> | |||
<template v-slot:activator> | |||
<v-list-item-icon | |||
v-if="text" | |||
class="v-list-item__icon--text" | |||
v-text="computedText" | |||
/> | |||
<v-list-item-avatar | |||
v-else-if="item.avatar" | |||
class="align-self-center" | |||
color="white" | |||
contain | |||
> | |||
<v-img src="https://demos.creative-tim.com/vuetify-material-dashboard/favicon.ico" /> | |||
</v-list-item-avatar> | |||
<v-list-item-content> | |||
<v-list-item-title v-text="item.title" /> | |||
</v-list-item-content> | |||
</template> | |||
<template v-for="(child, i) in children"> | |||
<base-item-sub-group | |||
v-if="child.children" | |||
:key="`sub-group-${i}`" | |||
:item="child" | |||
/> | |||
<base-item | |||
v-else | |||
:key="`item-${i}`" | |||
:item="child" | |||
text | |||
/> | |||
</template> | |||
</v-list-group> | |||
</template> | |||
<script> | |||
// Utilities | |||
import kebabCase from 'lodash/kebabCase' | |||
import { mapState } from 'vuex' | |||
export default { | |||
name: 'ItemGroup', | |||
inheritAttrs: false, | |||
props: { | |||
item: { | |||
type: Object, | |||
default: () => ({ | |||
avatar: undefined, | |||
group: undefined, | |||
title: undefined, | |||
children: [], | |||
}), | |||
}, | |||
subGroup: { | |||
type: Boolean, | |||
default: false, | |||
}, | |||
text: { | |||
type: Boolean, | |||
default: false, | |||
}, | |||
}, | |||
computed: { | |||
...mapState(['barColor']), | |||
children () { | |||
return this.item.children.map(item => ({ | |||
...item, | |||
to: !item.to ? undefined : `${this.item.group}/${item.to}`, | |||
})) | |||
}, | |||
computedText () { | |||
if (!this.item || !this.item.title) return '' | |||
let text = '' | |||
this.item.title.split(' ').forEach(val => { | |||
text += val.substring(0, 1) | |||
}) | |||
return text | |||
}, | |||
group () { | |||
return this.genGroup(this.item.children) | |||
}, | |||
}, | |||
methods: { | |||
genGroup (children) { | |||
return children | |||
.filter(item => item.to) | |||
.map(item => { | |||
const parent = item.group || this.item.group | |||
let group = `${parent}/${kebabCase(item.to)}` | |||
if (item.children) { | |||
group = `${group}|${this.genGroup(item.children)}` | |||
} | |||
return group | |||
}).join('|') | |||
}, | |||
}, | |||
} | |||
</script> | |||
<style> | |||
.v-list-group__activator p { | |||
margin-bottom: 0; | |||
} | |||
</style> |
@ -0,0 +1,25 @@ | |||
<template> | |||
<base-item-group | |||
:item="item" | |||
text | |||
sub-group | |||
/> | |||
</template> | |||
<script> | |||
export default { | |||
name: 'ItemSubGroup', | |||
props: { | |||
item: { | |||
type: Object, | |||
default: () => ({ | |||
avatar: undefined, | |||
group: undefined, | |||
title: undefined, | |||
children: [], | |||
}), | |||
}, | |||
}, | |||
} | |||
</script> |
@ -0,0 +1,60 @@ | |||
<template> | |||
<v-alert | |||
v-bind="$attrs" | |||
class="v-alert--material" | |||
dark | |||
v-on="$listeners" | |||
> | |||
<template | |||
v-if="$attrs.icon" | |||
v-slot:prepend | |||
> | |||
<v-icon | |||
class="v-alert__icon elevation-6 white" | |||
light | |||
:color="$attrs.color" | |||
> | |||
{{ $attrs.icon }} | |||
</v-icon> | |||
</template> | |||
<slot /> | |||
<template | |||
v-if="$attrs.dismissible" | |||
v-slot:close="{ toggle }" | |||
> | |||
<v-btn | |||
:aria-label="$vuetify.lang.t('$vuetify.close')" | |||
color | |||
icon | |||
small | |||
@click="toggle" | |||
> | |||
<v-icon> | |||
$vuetify.icons.cancel | |||
</v-icon> | |||
</v-btn> | |||
</template> | |||
</v-alert> | |||
</template> | |||
<script> | |||
export default { | |||
name: 'MaterialAlert', | |||
} | |||
</script> | |||
<style lang="sass"> | |||
.v-alert--material | |||
margin-top: 32px | |||
.v-alert__icon | |||
top: -36px | |||
.v-alert__dismissible | |||
align-self: flex-start | |||
margin: 0 !important | |||
padding: 0 !important | |||
</style> |
@ -0,0 +1,148 @@ | |||
<template> | |||
<v-card | |||
v-bind="$attrs" | |||
:class="classes" | |||
class="v-card--material pa-3" | |||
> | |||
<div class="d-flex grow flex-wrap"> | |||
<v-avatar | |||
v-if="avatar" | |||
size="128" | |||
class="mx-auto v-card--material__avatar elevation-6" | |||
color="grey" | |||
> | |||
<v-img :src="avatar" /> | |||
</v-avatar> | |||
<v-sheet | |||
v-else | |||
:class="{ | |||
'pa-7': !$slots.image | |||
}" | |||
:color="color" | |||
:max-height="icon ? 90 : undefined" | |||
:width="icon ? 'auto' : '100%'" | |||
elevation="6" | |||
class="text-start v-card--material__heading mb-n6" | |||
dark | |||
> | |||
<slot | |||
v-if="$slots.heading" | |||
name="heading" | |||
/> | |||
<slot | |||
v-else-if="$slots.image" | |||
name="image" | |||
/> | |||
<div | |||
v-else-if="title && !icon" | |||
class="display-1 font-weight-light" | |||
v-text="title" | |||
/> | |||
<v-icon | |||
v-else-if="icon" | |||
size="32" | |||
v-text="icon" | |||
/> | |||
<div | |||
v-if="text" | |||
class="headline font-weight-thin" | |||
v-text="text" | |||
/> | |||
</v-sheet> | |||
<div | |||
v-if="$slots['after-heading']" | |||
class="ml-6" | |||
> | |||
<slot name="after-heading" /> | |||
</div> | |||
<div | |||
v-else-if="icon && title" | |||
class="ml-4" | |||
> | |||
<div | |||
class="card-title font-weight-light" | |||
v-text="title" | |||
/> | |||
</div> | |||
</div> | |||
<slot /> | |||
<template v-if="$slots.actions"> | |||
<v-divider class="mt-2" /> | |||
<v-card-actions class="pb-0"> | |||
<slot name="actions" /> | |||
</v-card-actions> | |||
</template> | |||
</v-card> | |||
</template> | |||
<script> | |||
export default { | |||
name: 'MaterialCard', | |||
props: { | |||
avatar: { | |||
type: String, | |||
default: '', | |||
}, | |||
color: { | |||
type: String, | |||
default: 'success', | |||
}, | |||
icon: { | |||
type: String, | |||
default: undefined, | |||
}, | |||
image: { | |||
type: Boolean, | |||
default: false, | |||
}, | |||
text: { | |||
type: String, | |||
default: '', | |||
}, | |||
title: { | |||
type: String, | |||
default: '', | |||
}, | |||
}, | |||
computed: { | |||
classes () { | |||
return { | |||
'v-card--material--has-heading': this.hasHeading, | |||
} | |||
}, | |||
hasHeading () { | |||
return Boolean(this.$slots.heading || this.title || this.icon) | |||
}, | |||
hasAltHeading () { | |||
return Boolean(this.$slots.heading || (this.title && this.icon)) | |||
}, | |||
}, | |||
} | |||
</script> | |||
<style lang="sass"> | |||
.v-card--material | |||
&__avatar | |||
position: relative | |||
top: -64px | |||
margin-bottom: -32px | |||
&__heading | |||
position: relative | |||
top: -40px | |||
transition: .3s ease | |||
z-index: 1 | |||
</style> |
@ -0,0 +1,95 @@ | |||
<template> | |||
<base-material-card | |||
class="v-card--material-chart" | |||
v-bind="$attrs" | |||
v-on="$listeners" | |||
> | |||
<template v-slot:heading> | |||
<chartist | |||
:data="data" | |||
:event-handlers="eventHandlers" | |||
:options="options" | |||
:ratio="ratio" | |||
:responsive-options="responsiveOptions" | |||
:type="type" | |||
style="max-height: 150px;" | |||
/> | |||
</template> | |||
<slot | |||
slot="reveal-actions" | |||
name="reveal-actions" | |||
/> | |||
<slot /> | |||
<slot | |||
slot="actions" | |||
name="actions" | |||
/> | |||
</base-material-card> | |||
</template> | |||
<script> | |||
export default { | |||
name: 'MaterialChartCard', | |||
inheritAttrs: false, | |||
props: { | |||
data: { | |||
type: Object, | |||
default: () => ({}), | |||
}, | |||
eventHandlers: { | |||
type: Array, | |||
default: () => ([]), | |||
}, | |||
options: { | |||
type: Object, | |||
default: () => ({}), | |||
}, | |||
ratio: { | |||
type: String, | |||
default: undefined, | |||
}, | |||
responsiveOptions: { | |||
type: Array, | |||
default: () => ([]), | |||
}, | |||
type: { | |||
type: String, | |||
required: true, | |||
validator: v => ['Bar', 'Line', 'Pie'].includes(v), | |||
}, | |||
}, | |||
} | |||
</script> | |||
<style lang="sass"> | |||
.v-card--material-chart | |||
p | |||
color: #999 | |||
.v-card--material__heading | |||
max-height: 185px | |||
.ct-label | |||
color: inherit | |||
opacity: .7 | |||
font-size: 0.975rem | |||
font-weight: 100 | |||
.ct-grid | |||
stroke: rgba(255, 255, 255, 0.2) | |||
.ct-series-a .ct-point, | |||
.ct-series-a .ct-line, | |||
.ct-series-a .ct-bar, | |||
.ct-series-a .ct-slice-donut | |||
stroke: rgba(255,255,255,.8) | |||
.ct-series-a .ct-slice-pie, | |||
.ct-series-a .ct-area | |||
fill: rgba(255,255,255,.4) | |||
</style> |
@ -0,0 +1,71 @@ | |||
<template> | |||
<v-snackbar | |||
v-model="internalValue" | |||
class="v-snackbar--material" | |||
v-bind="{ | |||
...$attrs, | |||
'color': 'transparent' | |||
}" | |||
> | |||
<base-material-alert | |||
v-model="internalValue" | |||
:color="$attrs.color" | |||
:dismissible="dismissible" | |||
:type="type" | |||
class="ma-0" | |||
dark | |||
> | |||
<slot /> | |||
</base-material-alert> | |||
</v-snackbar> | |||
</template> | |||
<script> | |||
export default { | |||
name: 'BaseMaterialSnackbar', | |||
props: { | |||
dismissible: { | |||
type: Boolean, | |||
default: true, | |||
}, | |||
type: { | |||
type: String, | |||
default: '', | |||
}, | |||
value: Boolean, | |||
}, | |||
data () { | |||
return { | |||
internalValue: this.value, | |||
} | |||
}, | |||
watch: { | |||
internalValue (val, oldVal) { | |||
if (val === oldVal) return | |||
this.$emit('input', val) | |||
}, | |||
value (val, oldVal) { | |||
if (val === oldVal) return | |||
this.internalValue = val | |||
}, | |||
}, | |||
} | |||
</script> | |||
<style lang="sass"> | |||
.v-snackbar--material | |||
margin-top: 32px | |||
margin-bottom: 32px | |||
.v-alert--material, | |||
.v-snack__wrapper | |||
border-radius: 4px | |||
.v-snack__content | |||
overflow: visible | |||
padding: 0 | |||
</style> |
@ -0,0 +1,113 @@ | |||
<template> | |||
<base-material-card | |||
:icon="icon" | |||
class="v-card--material-stats" | |||
v-bind="$attrs" | |||
v-on="$listeners" | |||
> | |||
<template v-slot:after-heading> | |||
<div class="ml-auto text-right"> | |||
<div | |||
class="body-3 grey--text font-weight-light" | |||
v-text="title" | |||
/> | |||
<h3 class="display-2 font-weight-light text--primary"> | |||
{{ value }} <small>{{ smallValue }}</small> | |||
</h3> | |||
</div> | |||
</template> | |||
<v-col | |||
cols="12" | |||
class="px-0" | |||
> | |||
<v-divider /> | |||
</v-col> | |||
<v-icon | |||
:color="subIconColor" | |||
size="16" | |||
class="ml-2 mr-1" | |||
> | |||
{{ subIcon }} | |||
</v-icon> | |||
<span | |||
:class="subTextColor" | |||
class="caption grey--text font-weight-light" | |||
v-text="subText" | |||
/> | |||
</base-material-card> | |||
</template> | |||
<script> | |||
import Card from './Card' | |||
export default { | |||
name: 'MaterialStatsCard', | |||
inheritAttrs: false, | |||
props: { | |||
...Card.props, | |||
icon: { | |||
type: String, | |||
required: true, | |||
}, | |||
subIcon: { | |||
type: String, | |||
default: undefined, | |||
}, | |||
subIconColor: { | |||
type: String, | |||
default: undefined, | |||
}, | |||
subTextColor: { | |||
type: String, | |||
default: undefined, | |||
}, | |||
subText: { | |||
type: String, | |||
default: undefined, | |||
}, | |||
title: { | |||
type: String, | |||
default: undefined, | |||
}, | |||
value: { | |||
type: String, | |||
default: undefined, | |||
}, | |||
smallValue: { | |||
type: String, | |||
default: undefined, | |||
}, | |||
}, | |||
} | |||
</script> | |||
<style lang="sass"> | |||
.v-card--material-stats | |||
display: flex | |||
flex-wrap: wrap | |||
position: relative | |||
> div:first-child | |||
justify-content: space-between | |||
.v-card | |||
border-radius: 4px | |||
flex: 0 1 auto | |||
.v-card__text | |||
display: inline-block | |||
flex: 1 0 calc(100% - 120px) | |||
position: absolute | |||
top: 0 | |||
right: 0 | |||
width: 100% | |||
.v-card__actions | |||
flex: 1 0 100% | |||
</style> |
@ -0,0 +1,43 @@ | |||
<template> | |||
<v-tabs | |||
v-model="internalValue" | |||
:active-class="`${color} ${$vuetify.theme.dark ? 'black' : 'white'}--text`" | |||
class="v-tabs--pill" | |||
hide-slider | |||
v-bind="$attrs" | |||
> | |||
<slot /> | |||
<slot name="items" /> | |||
</v-tabs> | |||
</template> | |||
<script> | |||
// Mixins | |||
import Proxyable from 'vuetify/lib/mixins/proxyable' | |||
export default { | |||
name: 'MaterialTabs', | |||
mixins: [Proxyable], | |||
props: { | |||
color: { | |||
type: String, | |||
default: 'primary', | |||
}, | |||
}, | |||
} | |||
</script> | |||
<style lang="sass"> | |||
.v-tabs--pill | |||
.v-tab, | |||
.v-tab:before | |||
border-radius: 24px | |||
&.v-tabs--icons-and-text | |||
.v-tab, | |||
.v-tab:before | |||
border-radius: 4px | |||
</style> |
@ -0,0 +1,76 @@ | |||
<template> | |||
<v-card class="text-center v-card--testimony"> | |||
<div class="pt-6"> | |||
<v-icon | |||
color="black" | |||
x-large | |||
> | |||
mdi-format-quote-close | |||
</v-icon> | |||
</div> | |||
<v-card-text | |||
class="display-1 font-weight-light font-italic mb-3" | |||
v-text="blurb" | |||
/> | |||
<div | |||
class="display-2 font-weight-light mb-2" | |||
v-text="author" | |||
/> | |||
<div | |||
class="body-2 text-uppercase grey--text" | |||
v-text="handle" | |||
/> | |||
<v-avatar | |||
class="elevation-12" | |||
color="grey" | |||
size="100" | |||
> | |||
<v-img | |||
:alt="`${author} Testimonial`" | |||
:src="avatar" | |||
/> | |||
</v-avatar> | |||
<div /> | |||
</v-card> | |||
</template> | |||
<script> | |||
export default { | |||
name: 'BaseMaterialTestimony', | |||
props: { | |||
author: { | |||
type: String, | |||
default: '', | |||
}, | |||
avatar: { | |||
type: String, | |||
default: 'https://demos.creative-tim.com/material-dashboard/assets/img/faces/card-profile1-square.jpg', | |||
}, | |||
blurb: { | |||
type: String, | |||
default: '', | |||
}, | |||
handle: { | |||
type: String, | |||
default: '', | |||
}, | |||
}, | |||
} | |||
</script> | |||
<style lang="sass"> | |||
.v-card--testimony | |||
padding-bottom: 72px | |||
margin-bottom: 64px | |||
.v-avatar | |||
position: absolute | |||
left: calc(50% - 64px) | |||
top: calc(100% - 64px) | |||
</style> |
@ -0,0 +1,34 @@ | |||
<template> | |||
<div class="display-2 font-weight-light col col-12 text-left text--primary pa-0 mb-8"> | |||
<h5 class="font-weight-light"> | |||
{{ subheading }} | |||
<template v-if="text"> | |||
<span | |||
class="subtitle-1" | |||
v-text="text" | |||
/> | |||
</template> | |||
</h5> | |||
<div class="pt-2"> | |||
<slot /> | |||
</div> | |||
</div> | |||
</template> | |||
<script> | |||
export default { | |||
name: 'Subheading', | |||
props: { | |||
subheading: { | |||
type: String, | |||
default: '', | |||
}, | |||
text: { | |||
type: String, | |||
default: '', | |||
}, | |||
}, | |||
} | |||
</script> |
@ -0,0 +1,40 @@ | |||
<template> | |||
<section class="mb-12 text-center"> | |||
<h1 | |||
class="font-weight-light mb-2 headline" | |||
v-text="`Vuetify ${heading}`" | |||
/> | |||
<span | |||
class="font-weight-light subtitle-1" | |||
> | |||
Please checkout the | |||
<a | |||
:href="`https://vuetifyjs.com/${link}`" | |||
rel="noopener" | |||
target="_blank" | |||
class="secondary--text" | |||
style="text-decoration:none;" | |||
> | |||
full documentation | |||
</a> | |||
</span> | |||
</section> | |||
</template> | |||
<script> | |||
export default { | |||
name: 'VComponent', | |||
props: { | |||
heading: { | |||
type: String, | |||
default: '', | |||
}, | |||
link: { | |||
type: String, | |||
default: '', | |||
}, | |||
}, | |||
} | |||
</script> |
@ -0,0 +1,19 @@ | |||
import Vue from 'vue' | |||
import VueI18n from 'vue-i18n' | |||
import en from 'vuetify/lib/locale/en' | |||
Vue.use(VueI18n) | |||
const messages = { | |||
en: { | |||
...require('@/locales/en.json'), | |||
$vuetify: en, | |||
}, | |||
} | |||
export default new VueI18n({ | |||
locale: process.env.VUE_APP_I18N_LOCALE || 'en', | |||
fallbackLocale: process.env.VUE_APP_I18N_FALLBACK_LOCALE || 'en', | |||
messages, | |||
}) |
@ -0,0 +1,45 @@ | |||
{ | |||
"avatar": "Vuetify MD", | |||
"buttons": "Buttons", | |||
"calendar": "Calendar", | |||
"charts": "Charts", | |||
"components": "Components", | |||
"ct": "CT", | |||
"dashboard": "Dashboard", | |||
"dtables": "Data Tables", | |||
"eforms": "Extended Forms", | |||
"error": "Error Page", | |||
"etables": "Extended Tables", | |||
"example": "Example", | |||
"forms": "Forms", | |||
"fullscreen": "Full Screen Map", | |||
"google": "Google Maps", | |||
"grid": "Grid System", | |||
"icons": "Icons", | |||
"lock": "Lock Screen Page", | |||
"login": "Login Page", | |||
"maps": "Maps", | |||
"multi": "Multi Level Collapse", | |||
"notifications": "Notifications", | |||
"pages": "Pages", | |||
"plan": "Choose Plan", | |||
"pricing": "Pricing", | |||
"my-profile": "My Profile", | |||
"edit-profile": "Edit Profile", | |||
"register": "Register Page", | |||
"rforms": "Regular Forms", | |||
"rtables": "Regular Tables", | |||
"rtl": "RTL Support", | |||
"search": "Search", | |||
"settings": "Settings", | |||
"tables": "Tables", | |||
"tabs": "Tabs", | |||
"tim": "Creative Tim", | |||
"timeline": "Timeline", | |||
"typography": "Typography", | |||
"upgrade": "Upgrade To PRO", | |||
"user": "User Profile", | |||
"vforms": "Validation Forms", | |||
"widgets": "Widgets", | |||
"wizard": "Wizard" | |||
} |
@ -0,0 +1,32 @@ | |||
// ========================================================= | |||
// * Vuetify Material Dashboard - v2.1.0 | |||
// ========================================================= | |||
// | |||
// * Product Page: https://www.creative-tim.com/product/vuetify-material-dashboard | |||
// * Copyright 2019 Creative Tim (https://www.creative-tim.com) | |||
// | |||
// * Coded by Creative Tim | |||
// | |||
// ========================================================= | |||
// | |||
// * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. | |||
import Vue from 'vue' | |||
import App from './App.vue' | |||
import router from './router' | |||
import store from './store' | |||
import './plugins/base' | |||
import './plugins/chartist' | |||
import './plugins/vee-validate' | |||
import vuetify from './plugins/vuetify' | |||
import i18n from './i18n' | |||
Vue.config.productionTip = false | |||
new Vue({ | |||
router, | |||
store, | |||
vuetify, | |||
i18n, | |||
render: h => h(App), | |||
}).$mount('#app') |
@ -0,0 +1,17 @@ | |||
import Vue from 'vue' | |||
import upperFirst from 'lodash/upperFirst' | |||
import camelCase from 'lodash/camelCase' | |||
const requireComponent = require.context( | |||
'@/components/base', true, /\.vue$/, | |||
) | |||
requireComponent.keys().forEach(fileName => { | |||
const componentConfig = requireComponent(fileName) | |||
const componentName = upperFirst( | |||
camelCase(fileName.replace(/^\.\//, '').replace(/\.\w+$/, '')), | |||
) | |||
Vue.component(`Base${componentName}`, componentConfig.default || componentConfig) | |||
}) |
@ -0,0 +1,4 @@ | |||
import Vue from 'vue' | |||
import 'chartist/dist/chartist.min.css' | |||
Vue.use(require('vue-chartist')) |
@ -0,0 +1,22 @@ | |||
import Vue from 'vue' | |||
import { | |||
extend, | |||
ValidationObserver, | |||
ValidationProvider, | |||
} from 'vee-validate' | |||
import { | |||
email, | |||
max, | |||
min, | |||
numeric, | |||
required, | |||
} from 'vee-validate/dist/rules' | |||
extend('email', email) | |||
extend('max', max) | |||
extend('min', min) | |||
extend('numeric', numeric) | |||
extend('required', required) | |||
Vue.component('validation-provider', ValidationProvider) | |||
Vue.component('validation-observer', ValidationObserver) |
@ -0,0 +1,25 @@ | |||
import Vue from 'vue' | |||
import Vuetify from 'vuetify/lib' | |||
import i18n from '@/i18n' | |||
import '@/sass/overrides.sass' | |||
Vue.use(Vuetify) | |||
const theme = { | |||
primary: '#4CAF50', | |||
secondary: '#9C27b0', | |||
accent: '#9C27b0', | |||
info: '#00CAE3', | |||
} | |||
export default new Vuetify({ | |||
lang: { | |||
t: (key, ...params) => i18n.t(key, params), | |||
}, | |||
theme: { | |||
themes: { | |||
dark: theme, | |||
light: theme, | |||
}, | |||
}, | |||
}) |
@ -0,0 +1,62 @@ | |||
import Vue from 'vue' | |||
import Router from 'vue-router' | |||
Vue.use(Router) | |||
export default new Router({ | |||
mode: 'hash', | |||
base: process.env.BASE_URL, | |||
routes: [ | |||
{ | |||
path: '/', | |||
component: () => import('@/views/dashboard/Index'), | |||
children: [ | |||
// Dashboard | |||
{ | |||
name: 'Dashboard', | |||
path: '', | |||
component: () => import('@/views/dashboard/Dashboard'), | |||
}, | |||
// Pages | |||
{ | |||
name: 'User Profile', | |||
path: 'pages/user', | |||
component: () => import('@/views/dashboard/pages/UserProfile'), | |||
}, | |||
{ | |||
name: 'Notifications', | |||
path: 'components/notifications', | |||
component: () => import('@/views/dashboard/component/Notifications'), | |||
}, | |||
{ | |||
name: 'Icons', | |||
path: 'components/icons', | |||
component: () => import('@/views/dashboard/component/Icons'), | |||
}, | |||
{ | |||
name: 'Typography', | |||
path: 'components/typography', | |||
component: () => import('@/views/dashboard/component/Typography'), | |||
}, | |||
// Tables | |||
{ | |||
name: 'Regular Tables', | |||
path: 'tables/regular-tables', | |||
component: () => import('@/views/dashboard/tables/RegularTables'), | |||
}, | |||
// Maps | |||
{ | |||
name: 'Google Maps', | |||
path: 'maps/google-maps', | |||
component: () => import('@/views/dashboard/maps/GoogleMaps'), | |||
}, | |||