├── static ├── favicon.ico ├── README.md └── favicon.png ├── assets ├── img │ ├── favicon.png │ ├── new_logo.png │ ├── tim_80x80.png │ ├── vue-logo.png │ ├── apple-icon.png │ ├── background.jpg │ └── faces │ │ ├── face-0.jpg │ │ ├── face-1.jpg │ │ ├── face-2.jpg │ │ └── face-3.jpg ├── fonts │ ├── themify.eot │ ├── themify.ttf │ ├── themify.woff │ ├── glyphicons-halflings-regular.e18bbf6.ttf │ ├── glyphicons-halflings-regular.f4769f9.eot │ ├── glyphicons-halflings-regular.fa27723.woff │ └── glyphicons-halflings-regular.448c34a.woff2 ├── sass │ ├── paper │ │ ├── mixins │ │ │ ├── _tabs.scss │ │ │ ├── _cards.scss │ │ │ ├── _navbars.scss │ │ │ ├── _icons.scss │ │ │ ├── _inputs.scss │ │ │ ├── _transparency.scss │ │ │ ├── _labels.scss │ │ │ ├── _sidebar.scss │ │ │ ├── _buttons.scss │ │ │ ├── _chartist.scss │ │ │ └── _vendor-prefixes.scss │ │ ├── _mixins.scss │ │ ├── _footers.scss │ │ ├── _alerts.scss │ │ ├── _tables.scss │ │ ├── _typography.scss │ │ ├── _misc.scss │ │ ├── _checkbox-radio.scss │ │ ├── _inputs.scss │ │ ├── _sidebar-and-main-panel.scss │ │ ├── _cards.scss │ │ ├── _buttons.scss │ │ ├── _chartist.scss │ │ ├── _variables.scss │ │ ├── _responsive.scss │ │ ├── _dropdown.scss │ │ └── _navbars.scss │ └── paper-dashboard.scss ├── README.md └── css │ └── themify-icons.css ├── plugins ├── dashboard │ ├── index.js │ ├── globalDirectives.js │ ├── globalComponents.js │ └── paperDashboard.js └── README.md ├── .gitignore ├── layouts ├── dashboard │ ├── MobileMenu.vue │ ├── Content.vue │ ├── ContentFooter.vue │ ├── DashboardLayout.vue │ └── TopNavbar.vue ├── README.md └── default.vue ├── components ├── README.md ├── Notifications │ └── NotificationTemplate.vue ├── SidebarPlugin │ ├── index.js │ ├── MovingArrow.vue │ ├── SidebarLink.vue │ └── SideBar.vue ├── Cards │ ├── StatsCard.vue │ ├── Card.vue │ └── ChartCard.vue ├── index.js ├── Button.vue ├── Dropdown.vue ├── PaperTable.vue ├── Inputs │ └── formGroupInput.vue ├── UserProfile │ ├── UserCard.vue │ ├── MembersCard.vue │ └── EditProfileForm.vue ├── AppLogo.vue └── Charts.vue ├── .editorconfig ├── pages ├── README.md ├── dashboard.vue ├── stats.vue ├── index.vue ├── table-List.vue ├── not-found-page.vue ├── maps.vue ├── notifications.vue └── typography.vue ├── middleware └── README.md ├── store └── README.md ├── .eslintrc.js ├── README.md ├── package.json └── nuxt.config.js /static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansezz/vue-paper-dashboard-nuxtjs/HEAD/static/favicon.ico -------------------------------------------------------------------------------- /assets/img/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansezz/vue-paper-dashboard-nuxtjs/HEAD/assets/img/favicon.png -------------------------------------------------------------------------------- /assets/fonts/themify.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansezz/vue-paper-dashboard-nuxtjs/HEAD/assets/fonts/themify.eot -------------------------------------------------------------------------------- /assets/fonts/themify.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansezz/vue-paper-dashboard-nuxtjs/HEAD/assets/fonts/themify.ttf -------------------------------------------------------------------------------- /assets/img/new_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansezz/vue-paper-dashboard-nuxtjs/HEAD/assets/img/new_logo.png -------------------------------------------------------------------------------- /assets/img/tim_80x80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansezz/vue-paper-dashboard-nuxtjs/HEAD/assets/img/tim_80x80.png -------------------------------------------------------------------------------- /assets/img/vue-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansezz/vue-paper-dashboard-nuxtjs/HEAD/assets/img/vue-logo.png -------------------------------------------------------------------------------- /assets/fonts/themify.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansezz/vue-paper-dashboard-nuxtjs/HEAD/assets/fonts/themify.woff -------------------------------------------------------------------------------- /assets/img/apple-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansezz/vue-paper-dashboard-nuxtjs/HEAD/assets/img/apple-icon.png -------------------------------------------------------------------------------- /assets/img/background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansezz/vue-paper-dashboard-nuxtjs/HEAD/assets/img/background.jpg -------------------------------------------------------------------------------- /assets/img/faces/face-0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansezz/vue-paper-dashboard-nuxtjs/HEAD/assets/img/faces/face-0.jpg -------------------------------------------------------------------------------- /assets/img/faces/face-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansezz/vue-paper-dashboard-nuxtjs/HEAD/assets/img/faces/face-1.jpg -------------------------------------------------------------------------------- /assets/img/faces/face-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansezz/vue-paper-dashboard-nuxtjs/HEAD/assets/img/faces/face-2.jpg -------------------------------------------------------------------------------- /assets/img/faces/face-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansezz/vue-paper-dashboard-nuxtjs/HEAD/assets/img/faces/face-3.jpg -------------------------------------------------------------------------------- /assets/sass/paper/mixins/_tabs.scss: -------------------------------------------------------------------------------- 1 | @mixin pill-style($color) { 2 | border: 1px solid $color; 3 | color: $color; 4 | } 5 | -------------------------------------------------------------------------------- /plugins/dashboard/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import PaperDashboard from "./paperDashboard"; 3 | 4 | Vue.use(PaperDashboard); 5 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # dependencies 2 | node_modules 3 | 4 | # logs 5 | npm-debug.log 6 | 7 | # Nuxt build 8 | .nuxt 9 | 10 | # Nuxt generate 11 | dist 12 | 13 | .idea 14 | -------------------------------------------------------------------------------- /assets/fonts/glyphicons-halflings-regular.e18bbf6.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansezz/vue-paper-dashboard-nuxtjs/HEAD/assets/fonts/glyphicons-halflings-regular.e18bbf6.ttf -------------------------------------------------------------------------------- /assets/fonts/glyphicons-halflings-regular.f4769f9.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansezz/vue-paper-dashboard-nuxtjs/HEAD/assets/fonts/glyphicons-halflings-regular.f4769f9.eot -------------------------------------------------------------------------------- /assets/fonts/glyphicons-halflings-regular.fa27723.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansezz/vue-paper-dashboard-nuxtjs/HEAD/assets/fonts/glyphicons-halflings-regular.fa27723.woff -------------------------------------------------------------------------------- /assets/fonts/glyphicons-halflings-regular.448c34a.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ansezz/vue-paper-dashboard-nuxtjs/HEAD/assets/fonts/glyphicons-halflings-regular.448c34a.woff2 -------------------------------------------------------------------------------- /assets/sass/paper/mixins/_cards.scss: -------------------------------------------------------------------------------- 1 | @mixin filter($color) { 2 | @if $color == #FFFFFF { 3 | background-color: rgba($color, .91); 4 | } @else { 5 | background-color: rgba($color, .69); 6 | } 7 | } 8 | 9 | -------------------------------------------------------------------------------- /layouts/dashboard/MobileMenu.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 11 | -------------------------------------------------------------------------------- /components/README.md: -------------------------------------------------------------------------------- 1 | # COMPONENTS 2 | 3 | The components directory contains your Vue.js Components. 4 | Nuxt.js doesn't supercharge these components. 5 | 6 | **This directory is not required, you can delete it if you don't want to use it.** 7 | 8 | -------------------------------------------------------------------------------- /assets/sass/paper/mixins/_navbars.scss: -------------------------------------------------------------------------------- 1 | @mixin navbar-color($color) { 2 | background-color: $color; 3 | } 4 | 5 | @mixin center-item() { 6 | left: 0; 7 | right: 0; 8 | margin-right: auto; 9 | margin-left: auto; 10 | position: absolute; 11 | } 12 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_size = 2 6 | indent_style = space 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | 12 | [*.md] 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /components/Notifications/NotificationTemplate.vue: -------------------------------------------------------------------------------- 1 | 2 | Welcome to Paper Dashboard - a beautiful freebie for every web developer. 3 | 4 | 5 | 10 | -------------------------------------------------------------------------------- /layouts/README.md: -------------------------------------------------------------------------------- 1 | # LAYOUTS 2 | 3 | This directory contains your Application Layouts. 4 | 5 | More information about the usage of this directory in the documentation: 6 | https://nuxtjs.org/guide/views#layouts 7 | 8 | **This directory is not required, you can delete it if you don't want to use it.** 9 | 10 | -------------------------------------------------------------------------------- /layouts/default.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 8 | 18 | -------------------------------------------------------------------------------- /pages/README.md: -------------------------------------------------------------------------------- 1 | # PAGES 2 | 3 | This directory contains your Application Views and Routes. 4 | The framework reads all the .vue files inside this directory and creates the router of your application. 5 | 6 | More information about the usage of this directory in the documentation: 7 | https://nuxtjs.org/guide/routing 8 | 9 | -------------------------------------------------------------------------------- /assets/sass/paper/mixins/_icons.scss: -------------------------------------------------------------------------------- 1 | @mixin icon-background($icon-url) { 2 | background-image: url($icon-url); 3 | 4 | } 5 | 6 | @mixin icon-shape($size, $padding, $border-radius) { 7 | height: $size; 8 | width: $size; 9 | padding: $padding; 10 | border-radius: $border-radius; 11 | display: inline-table; 12 | 13 | } 14 | -------------------------------------------------------------------------------- /assets/README.md: -------------------------------------------------------------------------------- 1 | # ASSETS 2 | 3 | This directory contains your un-compiled assets such as LESS, SASS, or JavaScript. 4 | 5 | More information about the usage of this directory in the documentation: 6 | https://nuxtjs.org/guide/assets#webpacked 7 | 8 | **This directory is not required, you can delete it if you don't want to use it.** 9 | 10 | -------------------------------------------------------------------------------- /pages/dashboard.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 17 | 19 | -------------------------------------------------------------------------------- /plugins/README.md: -------------------------------------------------------------------------------- 1 | # PLUGINS 2 | 3 | This directory contains your Javascript plugins that you want to run before instantiating the root vue.js application. 4 | 5 | More information about the usage of this directory in the documentation: 6 | https://nuxtjs.org/guide/plugins 7 | 8 | **This directory is not required, you can delete it if you don't want to use it.** 9 | 10 | -------------------------------------------------------------------------------- /plugins/dashboard/globalDirectives.js: -------------------------------------------------------------------------------- 1 | import { directive as vClickOutside } from "vue-clickaway"; 2 | 3 | /** 4 | * You can register global directives here and use them as a plugin in your main Vue instance 5 | */ 6 | 7 | const GlobalDirectives = { 8 | install(Vue) { 9 | Vue.directive("click-outside", vClickOutside); 10 | } 11 | }; 12 | 13 | export default GlobalDirectives; 14 | -------------------------------------------------------------------------------- /assets/sass/paper/_mixins.scss: -------------------------------------------------------------------------------- 1 | //Utilities 2 | @import "mixins/transparency"; 3 | @import "mixins/vendor-prefixes"; 4 | //Components 5 | @import "mixins/buttons"; 6 | @import "mixins/inputs"; 7 | @import "mixins/labels"; 8 | @import "mixins/tabs"; 9 | @import "mixins/navbars"; 10 | @import "mixins/icons"; 11 | @import "mixins/cards"; 12 | @import "mixins/chartist"; 13 | @import "mixins/sidebar"; 14 | -------------------------------------------------------------------------------- /static/README.md: -------------------------------------------------------------------------------- 1 | # STATIC 2 | 3 | This directory contains your static files. 4 | Each file inside this directory is mapped to /. 5 | 6 | Example: /static/robots.txt is mapped as /robots.txt. 7 | 8 | More information about the usage of this directory in the documentation: 9 | https://nuxtjs.org/guide/assets#static 10 | 11 | **This directory is not required, you can delete it if you don't want to use it.** 12 | 13 | -------------------------------------------------------------------------------- /assets/sass/paper/mixins/_inputs.scss: -------------------------------------------------------------------------------- 1 | @mixin input-size($padding-vertical, $padding-horizontal, $height) { 2 | padding: $padding-vertical $padding-horizontal; 3 | height: $height; 4 | } 5 | 6 | @mixin placeholder($color, $opacity) { 7 | color: $color; 8 | @include opacity(1); 9 | } 10 | 11 | @mixin light-form() { 12 | border-radius: 0; 13 | border: 0; 14 | padding: 0; 15 | background-color: transparent; 16 | 17 | } 18 | -------------------------------------------------------------------------------- /middleware/README.md: -------------------------------------------------------------------------------- 1 | # MIDDLEWARE 2 | 3 | This directory contains your Application Middleware. 4 | The middleware lets you define custom function to be ran before rendering a page or a group of pages (layouts). 5 | 6 | More information about the usage of this directory in the documentation: 7 | https://nuxtjs.org/guide/routing#middleware 8 | 9 | **This directory is not required, you can delete it if you don't want to use it.** 10 | 11 | -------------------------------------------------------------------------------- /store/README.md: -------------------------------------------------------------------------------- 1 | # STORE 2 | 3 | This directory contains your Vuex Store files. 4 | Vuex Store option is implemented in the Nuxt.js framework. 5 | Creating a index.js file in this directory activate the option in the framework automatically. 6 | 7 | More information about the usage of this directory in the documentation: 8 | https://nuxtjs.org/guide/vuex-store 9 | 10 | **This directory is not required, you can delete it if you don't want to use it.** 11 | 12 | -------------------------------------------------------------------------------- /assets/sass/paper/mixins/_transparency.scss: -------------------------------------------------------------------------------- 1 | // Opacity 2 | 3 | @mixin opacity($opacity) { 4 | opacity: $opacity; 5 | // IE8 filter 6 | $opacity-ie: ($opacity * 100); 7 | filter: #{alpha(opacity=$opacity-ie)}; 8 | } 9 | 10 | @mixin black-filter($opacity) { 11 | top: 0; 12 | left: 0; 13 | height: 100%; 14 | width: 100%; 15 | position: absolute; 16 | background-color: rgba(17, 17, 17, $opacity); 17 | display: block; 18 | content: ""; 19 | z-index: 1; 20 | } 21 | -------------------------------------------------------------------------------- /plugins/dashboard/globalComponents.js: -------------------------------------------------------------------------------- 1 | import { FormGroupInput, Card, DropDown, Button } from "../../components/index"; 2 | /** 3 | * You can register global components here and use them as a plugin in your main Vue instance 4 | */ 5 | 6 | const GlobalComponents = { 7 | install(Vue) { 8 | Vue.component("fg-input", FormGroupInput); 9 | Vue.component("drop-down", DropDown); 10 | Vue.component("card", Card); 11 | Vue.component("p-button", Button); 12 | } 13 | }; 14 | 15 | export default GlobalComponents; 16 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | env: { 4 | browser: true, 5 | node: true 6 | }, 7 | parserOptions: { 8 | parser: 'babel-eslint' 9 | }, 10 | extends: [ 11 | // https://github.com/vuejs/eslint-plugin-vue#priority-a-essential-error-prevention 12 | // consider switching to `plugin:vue/strongly-recommended` or `plugin:vue/recommended` for stricter rules. 13 | 'plugin:vue/essential' 14 | ], 15 | // required to lint *.vue files 16 | plugins: [ 17 | 'vue' 18 | ], 19 | // add your custom rules here 20 | rules: {} 21 | } 22 | -------------------------------------------------------------------------------- /layouts/dashboard/Content.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 14 | 28 | -------------------------------------------------------------------------------- /plugins/dashboard/paperDashboard.js: -------------------------------------------------------------------------------- 1 | import Notify from "vue-notifyjs"; 2 | import SideBar from "@/components/SidebarPlugin"; 3 | import GlobalComponents from "./globalComponents"; 4 | import GlobalDirectives from "./globalDirectives"; 5 | import "es6-promise/auto"; 6 | 7 | //css assets 8 | import "bootstrap/dist/css/bootstrap.css"; 9 | import "@/assets/sass/paper-dashboard.scss"; 10 | import "@/assets/css/themify-icons.css"; 11 | 12 | export default { 13 | install(Vue) { 14 | Vue.use(GlobalComponents); 15 | Vue.use(GlobalDirectives); 16 | Vue.use(SideBar); 17 | Vue.use(Notify); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /assets/sass/paper/mixins/_labels.scss: -------------------------------------------------------------------------------- 1 | @mixin label-style() { 2 | padding: $padding-label-vertical $padding-label-horizontal; 3 | border: 1px solid $default-color; 4 | border-radius: $border-radius-small; 5 | color: $default-color; 6 | font-weight: $font-weight-semi; 7 | font-size: $font-size-small; 8 | text-transform: uppercase; 9 | display: inline-block; 10 | vertical-align: middle; 11 | } 12 | 13 | @mixin label-color($color) { 14 | border-color: $color; 15 | color: $color; 16 | } 17 | 18 | @mixin label-color-fill($color) { 19 | border-color: $color; 20 | color: $white-color; 21 | background-color: $color; 22 | } 23 | -------------------------------------------------------------------------------- /components/SidebarPlugin/index.js: -------------------------------------------------------------------------------- 1 | import Sidebar from "./SideBar.vue"; 2 | import SidebarLink from "./SidebarLink"; 3 | 4 | const SidebarStore = { 5 | showSidebar: false, 6 | sidebarLinks: [], 7 | displaySidebar(value) { 8 | this.showSidebar = value; 9 | } 10 | }; 11 | 12 | const SidebarPlugin = { 13 | install(Vue) { 14 | let app = new Vue({ 15 | data: { 16 | sidebarStore: SidebarStore 17 | } 18 | }); 19 | 20 | Vue.prototype.$sidebar = app.sidebarStore; 21 | Vue.component("side-bar", Sidebar); 22 | Vue.component("sidebar-link", SidebarLink); 23 | } 24 | }; 25 | 26 | export default SidebarPlugin; 27 | -------------------------------------------------------------------------------- /components/Cards/StatsCard.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 30 | 32 | -------------------------------------------------------------------------------- /components/index.js: -------------------------------------------------------------------------------- 1 | import FormGroupInput from "./Inputs/formGroupInput.vue"; 2 | 3 | import DropDown from "./Dropdown.vue"; 4 | import PaperTable from "./PaperTable.vue"; 5 | import Button from "./Button"; 6 | 7 | import Card from "./Cards/Card.vue"; 8 | import ChartCard from "./Cards/ChartCard.vue"; 9 | import StatsCard from "./Cards/StatsCard.vue"; 10 | 11 | import SidebarPlugin from "./SidebarPlugin/index"; 12 | 13 | let components = { 14 | FormGroupInput, 15 | Card, 16 | ChartCard, 17 | StatsCard, 18 | PaperTable, 19 | DropDown, 20 | SidebarPlugin 21 | }; 22 | 23 | export default components; 24 | 25 | export { 26 | FormGroupInput, 27 | Card, 28 | ChartCard, 29 | StatsCard, 30 | PaperTable, 31 | DropDown, 32 | Button, 33 | SidebarPlugin 34 | }; 35 | -------------------------------------------------------------------------------- /pages/stats.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 30 | 32 | -------------------------------------------------------------------------------- /layouts/dashboard/ContentFooter.vue: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 23 | 25 | -------------------------------------------------------------------------------- /components/Cards/Card.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | {{title}} 9 | {{subTitle}} 10 | 11 | 12 | 13 | 14 | 15 | 16 | 20 | 21 | 22 | 31 | 33 | -------------------------------------------------------------------------------- /assets/sass/paper/_footers.scss: -------------------------------------------------------------------------------- 1 | .footer { 2 | background-attachment: fixed; 3 | position: relative; 4 | line-height: 20px; 5 | nav { 6 | ul { 7 | list-style: none; 8 | margin: 0; 9 | padding: 0; 10 | font-weight: normal; 11 | li { 12 | display: inline-block; 13 | padding: 10px 15px; 14 | margin: 15px 3px; 15 | line-height: 20px; 16 | text-align: center; 17 | } 18 | a:not(.btn) { 19 | color: $font-color; 20 | display: block; 21 | margin-bottom: 3px; 22 | 23 | &:focus, 24 | &:hover { 25 | color: $default-states-color; 26 | } 27 | } 28 | } 29 | } 30 | .copyright { 31 | color: $font-color; 32 | padding: 10px 15px; 33 | font-size: 14px; 34 | white-space: nowrap; 35 | margin: 15px 3px; 36 | line-height: 20px; 37 | } 38 | .heart { 39 | color: $danger-color; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /pages/index.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 14 | 15 | 45 | 46 | -------------------------------------------------------------------------------- /components/SidebarPlugin/MovingArrow.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 26 | 45 | -------------------------------------------------------------------------------- /assets/sass/paper-dashboard.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | 3 | ========================================================= 4 | * Paper Dashboard - v1.1.2 5 | ========================================================= 6 | 7 | * Product Page: http://www.creative-tim.com/product/paper-dashboard 8 | * Copyright 2017 Creative Tim (http://www.creative-tim.com) 9 | * Licensed under MIT (https://github.com/creativetimofficial/paper-dashboard/blob/master/LICENSE.md) 10 | 11 | ========================================================= 12 | 13 | * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | 15 | */ 16 | @import "paper/variables"; 17 | @import "paper/mixins"; 18 | @import "paper/typography"; 19 | // Core CSS 20 | @import "paper/misc"; 21 | @import "paper/sidebar-and-main-panel"; 22 | @import "paper/buttons"; 23 | @import "paper/inputs"; 24 | @import "paper/alerts"; 25 | @import "paper/tables"; 26 | @import "paper/checkbox-radio"; 27 | @import "paper/navbars"; 28 | @import "paper/footers"; 29 | // Fancy Stuff 30 | @import "paper/dropdown"; 31 | @import "paper/cards"; 32 | @import "paper/chartist"; 33 | @import "paper/responsive"; 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /components/Button.vue: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 52 | 54 | -------------------------------------------------------------------------------- /assets/sass/paper/mixins/_sidebar.scss: -------------------------------------------------------------------------------- 1 | @mixin sidebar-background-color($background-color, $font-color) { 2 | &:after, 3 | &:before { 4 | background-color: $background-color; 5 | } 6 | 7 | #style-3::-webkit-scrollbar-track 8 | { 9 | -webkit-box-shadow: inset 0 0 6px $background-color; 10 | background-color: $background-color; 11 | } 12 | 13 | #style-3::-webkit-scrollbar 14 | { 15 | width: 6px; 16 | background-color: $font-color; 17 | } 18 | 19 | #style-3::-webkit-scrollbar-thumb 20 | { 21 | background-color: $background-color; 22 | } 23 | 24 | 25 | .logo { 26 | border-bottom: 1px solid rgba($font-color, .3); 27 | 28 | p { 29 | color: $font-color; 30 | } 31 | 32 | .simple-text { 33 | color: $font-color; 34 | } 35 | } 36 | 37 | .nav { 38 | .nav-item:not(.active) { 39 | > .nav-link { 40 | color: $font-color; 41 | } 42 | } 43 | .divider { 44 | background-color: rgba($font-color, .2); 45 | } 46 | 47 | } 48 | 49 | } 50 | 51 | @mixin sidebar-active-color($font-color) { 52 | .nav { 53 | .nav-item { 54 | &.active > .nav-link { 55 | color: $font-color; 56 | opacity: 1; 57 | } 58 | } 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /components/Dropdown.vue: -------------------------------------------------------------------------------- 1 | 2 | 7 | 10 | 11 | 12 | {{title}} 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 50 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # vue-paper-dashboard-nuxtjs 2 | 3 | ### [Nuxt Js SSR version of Creative Tim Paper Dashboard made for Vue](https://cristijora.github.io/vue-paper-dashboard/) 4 | 5 | 6 | > Admin dashboard based on paper dashboard UI template + vue-router 7 | 8 | This project is a NuxtJs SSR Vue version of [Paper-dashboard](https://www.creative-tim.com/product/paper-dashboard) 9 | designed for VueJs developers.The dashboard includes vue-router and vuex 10 | 11 | ## Demo 12 | * Nuxt Js version Deployed on Heroku [Live Demo here](https://vue-paper-dashboard-nuxtjs.herokuapp.com/) 13 | * Check the Vue Js Official demo[Live Demo here](https://cristijora.github.io/vue-paper-dashboard). 14 | 15 | ## Build Setup 16 | 17 | ``` bash 18 | # install dependencies 19 | $ npm install # Or yarn install 20 | 21 | # serve with hot reload at localhost:3000 22 | $ npm run dev 23 | 24 | # build for production and launch server 25 | $ npm run build 26 | $ npm start 27 | 28 | # generate static project 29 | $ npm run generate 30 | ``` 31 | 32 | ### Screen 33 |  34 | [Nuxt Version](https://github.com/cristijora/vue-paper-dashboard-nuxt) 35 | 36 | 37 | For detailed explanation on how things work, checkout the [Nuxt.js docs](https://github.com/nuxt/nuxt.js). 38 | 39 | -------------------------------------------------------------------------------- /components/PaperTable.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {{column}} 6 | 7 | 8 | 9 | 10 | 11 | 14 | {{itemValue(item, column)}} 15 | 16 | 17 | 18 | 19 | 20 | 21 | 55 | 57 | -------------------------------------------------------------------------------- /assets/sass/paper/_alerts.scss: -------------------------------------------------------------------------------- 1 | .alert { 2 | border: 0; 3 | border-radius: 0; 4 | color: #FFFFFF; 5 | padding: 10px 15px; 6 | font-size: 14px; 7 | 8 | .container & { 9 | border-radius: 4px; 10 | 11 | } 12 | .navbar & { 13 | border-radius: 0; 14 | left: 0; 15 | position: absolute; 16 | right: 0; 17 | top: 85px; 18 | width: 100%; 19 | z-index: 3; 20 | } 21 | .navbar:not(.navbar-transparent) & { 22 | top: 70px; 23 | } 24 | 25 | span[data-notify="icon"] { 26 | font-size: 30px; 27 | display: block; 28 | left: 15px; 29 | position: absolute; 30 | top: 50%; 31 | margin-top: -20px; 32 | } 33 | 34 | .close ~ span { 35 | display: block; 36 | max-width: 89%; 37 | } 38 | 39 | &[data-notify="container"] { 40 | padding: 10px 10px 10px 20px; 41 | border-radius: $border-radius-base; 42 | } 43 | 44 | &.alert-with-icon { 45 | padding-left: 65px; 46 | } 47 | } 48 | 49 | .alert-info { 50 | background-color: $bg-info; 51 | color: $info-states-color; 52 | } 53 | 54 | .alert-success { 55 | background-color: $bg-success; 56 | color: $success-states-color; 57 | } 58 | 59 | .alert-warning { 60 | background-color: $bg-warning; 61 | color: $warning-states-color; 62 | } 63 | 64 | .alert-danger { 65 | background-color: $bg-danger; 66 | color: $danger-states-color; 67 | } 68 | 69 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue-paper-dashboard-nuxtjs", 3 | "version": "1.0.0", 4 | "description": "NuxtJs version of vue paper dashboard", 5 | "author": "Anass Ez-Zouaine ", 6 | "private": false, 7 | "config": { 8 | "nuxt": { 9 | "host": "0.0.0.0", 10 | "port": "3000" 11 | } 12 | }, 13 | "scripts": { 14 | "dev": "nuxt", 15 | "build": "nuxt build", 16 | "start": "nuxt start", 17 | "generate": "nuxt generate", 18 | "lint": "eslint --ext .js,.vue --ignore-path .gitignore .", 19 | "precommit": "npm run lint", 20 | "heroku-postbuild": "npm run build" 21 | }, 22 | "dependencies": { 23 | "nuxt": "^1.0.0", 24 | "bootstrap": "^4.0.0", 25 | "chartist": "^0.11.0", 26 | "vue-clickaway": "^2.1.0", 27 | "vue-notifyjs": "^0.3.0" 28 | }, 29 | "devDependencies": { 30 | "babel-eslint": "^8.2.1", 31 | "coffee-loader": "^0.9.0", 32 | "coffeescript": "^2.3.1", 33 | "eslint": "^4.15.0", 34 | "eslint-friendly-formatter": "^3.0.0", 35 | "eslint-loader": "^1.7.1", 36 | "eslint-plugin-vue": "^4.0.0", 37 | "node-sass": "^4.9.3", 38 | "pug": "^2.0.3", 39 | "pug-plain-loader": "^1.0.0", 40 | "sass-loader": "^7.1.0" 41 | }, 42 | "engines": { 43 | "node": ">= 8.1.4", 44 | "npm": ">= 5.0.0" 45 | }, 46 | "browserslist": [ 47 | "> 1%", 48 | "last 2 versions", 49 | "not ie <= 8" 50 | ] 51 | } 52 | -------------------------------------------------------------------------------- /components/SidebarPlugin/SidebarLink.vue: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | {{name}} 11 | 12 | 13 | 14 | 15 | 63 | 65 | -------------------------------------------------------------------------------- /components/Inputs/formGroupInput.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {{label}} 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 45 | 48 | -------------------------------------------------------------------------------- /assets/sass/paper/_tables.scss: -------------------------------------------------------------------------------- 1 | .table { 2 | thead, 3 | tbody, 4 | tfoot { 5 | tr > th, 6 | tr > td { 7 | border-top: 1px solid $table-line-color; 8 | } 9 | } 10 | thead th { 11 | border-bottom: 1px solid $table-line-color; 12 | border-top: 0; 13 | } 14 | > thead > tr > th { 15 | border-bottom-width: 0; 16 | font-size: $font-size-h5; 17 | font-weight: $font-weight-light; 18 | } 19 | 20 | .radio, 21 | .checkbox { 22 | margin-top: 0; 23 | margin-bottom: 22px; 24 | padding: 0; 25 | width: 15px; 26 | } 27 | > thead > tr > th, 28 | > tbody > tr > th, 29 | > tfoot > tr > th, 30 | > thead > tr > td, 31 | > tbody > tr > td, 32 | > tfoot > tr > td { 33 | padding: 12px; 34 | vertical-align: middle; 35 | } 36 | 37 | .th-description { 38 | max-width: 150px; 39 | } 40 | .td-price { 41 | font-size: 26px; 42 | font-weight: $font-weight-light; 43 | margin-top: 5px; 44 | text-align: right; 45 | } 46 | .td-total { 47 | font-weight: $font-weight-bold; 48 | font-size: $font-size-h5; 49 | padding-top: 20px; 50 | text-align: right; 51 | } 52 | 53 | .td-actions .btn { 54 | 55 | &.btn-sm, 56 | &.btn-xs { 57 | padding-left: 3px; 58 | padding-right: 3px; 59 | } 60 | } 61 | 62 | > tbody > tr { 63 | position: relative; 64 | } 65 | } 66 | 67 | .table-striped { 68 | tbody > tr:nth-of-type(2n+1) { 69 | background-color: #fff; 70 | } 71 | tbody > tr:nth-of-type(2n) { 72 | background-color: $pale-bg; 73 | } 74 | > thead > tr > th, 75 | > tbody > tr > th, 76 | > tfoot > tr > th, 77 | > thead > tr > td, 78 | > tbody > tr > td, 79 | > tfoot > tr > td { 80 | padding: 15px 8px; 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /components/UserProfile/UserCard.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | Chet Faker 10 | 11 | 12 | @chetfaker 13 | 14 | 15 | 16 | 17 | "I like the way you work it 18 | No diggity 19 | I wanna bag it up" 20 | 21 | 22 | 23 | 24 | 25 | 26 | {{info.title}} 27 | 28 | {{info.subTitle}} 29 | 30 | 31 | 32 | 33 | 34 | 35 | 69 | 71 | -------------------------------------------------------------------------------- /components/AppLogo.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 80 | 81 | -------------------------------------------------------------------------------- /assets/sass/paper/mixins/_buttons.scss: -------------------------------------------------------------------------------- 1 | // Mixin for generating new styles 2 | @mixin btn-styles($btn-color, $btn-states-color) { 3 | background-color: $btn-color; 4 | border-color: $btn-color; 5 | color: $white-color; 6 | @include opacity(1); 7 | 8 | &:hover, 9 | &:focus, 10 | &:active, 11 | &.active, 12 | .show > &.dropdown-toggle{ 13 | background-color: $btn-states-color; 14 | color: $white-color; 15 | border-color: $btn-states-color; 16 | } 17 | 18 | .caret{ 19 | border-top-color: $white-color; 20 | } 21 | 22 | &.btn-link { 23 | color: $btn-color; 24 | 25 | &:hover, 26 | &:focus, 27 | &:active, 28 | &.active, 29 | .open > &.dropdown-toggle{ 30 | background-color: $transparent-bg; 31 | color: $btn-states-color; 32 | } 33 | 34 | .caret{ 35 | border-top-color: $btn-color; 36 | } 37 | } 38 | 39 | .caret{ 40 | border-top-color: $white-color; 41 | } 42 | } 43 | 44 | @mixin btn-outline-styles($btn-color, $btn-states-color){ 45 | border-color: $btn-color; 46 | color: $btn-color; 47 | @include opacity(1); 48 | 49 | &:hover, 50 | &:focus, 51 | &:active, 52 | &.active, 53 | .open > &.dropdown-toggle { 54 | background-color: $btn-color; 55 | color: $fill-font-color; 56 | border-color: $btn-color; 57 | .caret{ 58 | border-top-color: $fill-font-color; 59 | } 60 | } 61 | 62 | .caret{ 63 | border-top-color: $white-color; 64 | } 65 | 66 | &.disabled, 67 | &:disabled, 68 | &[disabled], 69 | fieldset[disabled] & { 70 | &, 71 | &:hover, 72 | &:focus, 73 | &.focus, 74 | &:active, 75 | &.active { 76 | background-color: $transparent-bg; 77 | border-color: $btn-color; 78 | } 79 | } 80 | } 81 | 82 | @mixin btn-size($padding-vertical, $padding-horizontal, $font-size, $line-height){ 83 | font-size: $font-size; 84 | padding: $padding-vertical $padding-horizontal; 85 | 86 | &.btn-simple{ 87 | padding: $padding-vertical + 2 $padding-horizontal; 88 | } 89 | 90 | } 91 | -------------------------------------------------------------------------------- /components/UserProfile/MembersCard.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | {{member.name}} 14 | 15 | 16 | {{member.status}} 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 71 | 73 | -------------------------------------------------------------------------------- /nuxt.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: [ 3 | '~/plugins/dashboard' 4 | ], 5 | css: [ 6 | 'vue-notifyjs/themes/default.css' 7 | ], 8 | router: { 9 | linkActiveClass: 'active', 10 | linkExactActiveClass: 'exact-active', 11 | extendRoutes (routes, resolve) { 12 | routes.push({ 13 | name: 'custom', 14 | path: '*', 15 | component: resolve(__dirname, 'pages/not-found-page.vue') 16 | }) 17 | } 18 | }, 19 | /* 20 | ** Headers of the page 21 | */ 22 | head: { 23 | title: 'vue-paper-dashboard-nuxtjs', 24 | meta: [ 25 | {charset: 'utf-8'}, 26 | {'http-equiv': 'X-UA-Compatible', content: 'IE=edge,chrome=1'}, 27 | {name: 'viewport', content: 'width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0'}, 28 | {hid: 'description', name: 'description', content: 'NuxtJs version of vue paper dashboard'} 29 | ], 30 | script: [ 31 | {src: 'https://maps.googleapis.com/maps/api/js?libraries=places&key=AIzaSyAamVCoyQ4AuvBpxVRMs9P-HFkfPVQj0Kw'} 32 | ], 33 | link: [ 34 | {rel: 'icon', type: 'image/x-icon', href: '/favicon.png'}, 35 | {rel: 'stylesheet', href: 'https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css'}, 36 | {rel: 'stylesheet', href: 'https://fonts.googleapis.com/css?family=Muli:400,300'}, 37 | {rel: 'stylesheet', href: 'https://fonts.googleapis.com/css?family=Montserrat'} 38 | ] 39 | }, 40 | /* 41 | ** Customize the progress bar color 42 | */ 43 | loading: {color: '#3B8070'}, 44 | /* 45 | ** Build configuration 46 | */ 47 | build: { 48 | /* 49 | ** Run ESLint on save 50 | */ 51 | extend(config, {isDev, isClient}) { 52 | if (isDev && isClient) { 53 | config.module.rules.push({ 54 | enforce: 'pre', 55 | test: /\.(js|vue)$/, 56 | loader: 'eslint-loader', 57 | exclude: /(node_modules)/ 58 | }) 59 | } 60 | } 61 | }, 62 | render: { 63 | bundleRenderer: { 64 | shouldPreload: (file, type) => { 65 | return ['script', 'style', 'font'].includes(type) 66 | } 67 | } 68 | } 69 | } 70 | 71 | -------------------------------------------------------------------------------- /pages/table-List.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 89 | 91 | -------------------------------------------------------------------------------- /pages/not-found-page.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Toggle navigation 9 | 10 | 11 | 12 | 13 | Site title 14 | 15 | 16 | 17 | 18 | 19 | 20 | Home 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 404 Not Found 34 | Oops! It seems that this page does not exist. 35 | 36 | 37 | 38 | 39 | 40 | 58 | 59 | 60 | 61 | 64 | -------------------------------------------------------------------------------- /layouts/dashboard/DashboardLayout.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | Stats 18 | 19 | 20 | 24 | Notification 1 25 | Notification 2 26 | Notification 3 27 | Notification 4 28 | Another notification 29 | 30 | 31 | 32 | 33 | Settings 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 52 | 73 | -------------------------------------------------------------------------------- /layouts/dashboard/TopNavbar.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{routeName}} 5 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | Stats 20 | 21 | 22 | 26 | Notification 1 27 | Notification 2 28 | Notification 3 29 | Notification 4 30 | Another notification 31 | 32 | 33 | 34 | 35 | 36 | Settings 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 77 | 79 | -------------------------------------------------------------------------------- /static/favicon.png: -------------------------------------------------------------------------------- 1 | �PNG 2 | 3 | IHDR ` ` �w8 gAMA ���a sRGB ��� cHRM z&
{{subTitle}}
{{name}}
17 | "I like the way you work it 18 | No diggity 19 | I wanna bag it up" 20 |
Stats
Settings
36 | Settings 37 |