├── CHANGELOG.md ├── ISSUE_TEMPLATE.md ├── LICENSE.md ├── README.md ├── laravel-json-api ├── .editorconfig ├── .env.example ├── .gitattributes ├── .gitignore ├── .rnd ├── README.md ├── app │ ├── Console │ │ ├── Commands │ │ │ └── ResetDefaultUsers.php │ │ └── Kernel.php │ ├── Exceptions │ │ └── Handler.php │ ├── Http │ │ ├── Controllers │ │ │ ├── Api │ │ │ │ └── V2 │ │ │ │ │ ├── Auth │ │ │ │ │ ├── ForgotPasswordController.php │ │ │ │ │ ├── LoginController.php │ │ │ │ │ ├── LogoutController.php │ │ │ │ │ ├── RegisterController.php │ │ │ │ │ └── ResetPasswordController.php │ │ │ │ │ └── MeController.php │ │ │ └── Controller.php │ │ ├── Kernel.php │ │ ├── Middleware │ │ │ ├── Authenticate.php │ │ │ ├── EncryptCookies.php │ │ │ ├── JsonApi.php │ │ │ ├── PreventRequestsDuringMaintenance.php │ │ │ ├── RedirectIfAuthenticated.php │ │ │ ├── TrimStrings.php │ │ │ ├── TrustHosts.php │ │ │ ├── TrustProxies.php │ │ │ ├── ValidateSignature.php │ │ │ └── VerifyCsrfToken.php │ │ └── Requests │ │ │ └── Api │ │ │ └── V2 │ │ │ └── Auth │ │ │ ├── ForgotPasswordRequest.php │ │ │ ├── LoginRequest.php │ │ │ ├── RegisterRequest.php │ │ │ └── ResetPasswordRequest.php │ ├── JsonApi │ │ └── V2 │ │ │ ├── Server.php │ │ │ └── Users │ │ │ ├── UserRequest.php │ │ │ └── UserSchema.php │ ├── Models │ │ └── User.php │ ├── Notifications │ │ └── Auth │ │ │ └── ResetPasswordNotification.php │ ├── Policies │ │ └── UserPolicy.php │ └── Providers │ │ ├── AppServiceProvider.php │ │ ├── AuthServiceProvider.php │ │ ├── BroadcastServiceProvider.php │ │ ├── EventServiceProvider.php │ │ └── RouteServiceProvider.php ├── artisan ├── bootstrap │ ├── app.php │ └── cache │ │ └── .gitignore ├── composer.json ├── composer.lock ├── config │ ├── app.php │ ├── auth.php │ ├── broadcasting.php │ ├── cache.php │ ├── cors.php │ ├── database.php │ ├── filesystems.php │ ├── hashing.php │ ├── jsonapi.php │ ├── logging.php │ ├── mail.php │ ├── queue.php │ ├── sanctum.php │ ├── services.php │ ├── session.php │ └── view.php ├── database │ ├── .gitignore │ ├── factories │ │ └── UserFactory.php │ ├── migrations │ │ ├── 2014_10_12_000000_create_users_table.php │ │ ├── 2014_10_12_100000_create_password_resets_table.php │ │ ├── 2016_06_01_000001_create_oauth_auth_codes_table.php │ │ ├── 2016_06_01_000002_create_oauth_access_tokens_table.php │ │ ├── 2016_06_01_000003_create_oauth_refresh_tokens_table.php │ │ ├── 2016_06_01_000004_create_oauth_clients_table.php │ │ ├── 2016_06_01_000005_create_oauth_personal_access_clients_table.php │ │ ├── 2019_08_19_000000_create_failed_jobs_table.php │ │ └── 2019_12_14_000001_create_personal_access_tokens_table.php │ └── seeders │ │ ├── DatabaseSeeder.php │ │ └── UsersSeeder.php ├── lang │ └── en │ │ ├── auth.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ └── validation.php ├── package.json ├── phpunit.xml ├── public │ ├── .htaccess │ ├── favicon.ico │ ├── index.php │ └── robots.txt ├── resources │ ├── css │ │ └── app.css │ ├── js │ │ ├── app.js │ │ └── bootstrap.js │ └── views │ │ └── welcome.blade.php ├── routes │ ├── api.php │ ├── channels.php │ ├── console.php │ └── web.php ├── storage │ ├── app │ │ ├── .gitignore │ │ └── public │ │ │ └── .gitignore │ ├── framework │ │ ├── .gitignore │ │ ├── cache │ │ │ ├── .gitignore │ │ │ └── data │ │ │ │ └── .gitignore │ │ ├── sessions │ │ │ └── .gitignore │ │ ├── testing │ │ │ └── .gitignore │ │ └── views │ │ │ └── .gitignore │ └── logs │ │ └── .gitignore ├── tests │ ├── CreatesApplication.php │ ├── Feature │ │ └── ExampleTest.php │ ├── TestCase.php │ └── Unit │ │ └── ExampleTest.php └── vite.config.js └── vue-paper-dashboard ├── .babelrc ├── .env.example ├── .eslintrc ├── .eslintrc.json ├── .gitattributes ├── .gitignore ├── CHANGELOG.md ├── docs ├── .vuepress │ ├── components │ │ ├── component-status.vue │ │ ├── components-table.vue │ │ └── props-table.vue │ ├── config.js │ ├── demo-block │ │ └── demo-block.vue │ ├── demo.css │ ├── doc_styles.scss │ ├── enhanceApp.js │ ├── markdownParser.js │ ├── override.styl │ ├── public │ │ └── static │ │ │ ├── .gitkeep │ │ │ └── img │ │ │ ├── apple-icon.png │ │ │ ├── background.jpg │ │ │ ├── default-avatar.png │ │ │ ├── faces │ │ │ ├── ayo-ogunseinde-2.jpg │ │ │ ├── erik-lucatero-2.jpg │ │ │ ├── face-0.jpg │ │ │ ├── face-1.jpg │ │ │ ├── face-2.jpg │ │ │ ├── face-3.jpg │ │ │ ├── joe-gardner-1.jpg │ │ │ ├── joe-gardner-2.jpg │ │ │ └── kaci-baum-2.jpg │ │ │ ├── favicon.png │ │ │ ├── glyphicons-halflings-regular.8988968.svg │ │ │ ├── mask.png │ │ │ ├── mike.jpg │ │ │ ├── new_logo.png │ │ │ ├── tables │ │ │ ├── agenda.png │ │ │ ├── evernote.png │ │ │ └── stylus.jpg │ │ │ ├── tim_80x80.png │ │ │ └── vue-logo.png │ ├── strip-tags.js │ └── utils │ │ └── get-sidebar-elements.js ├── README.md ├── component-docs │ ├── button.md │ ├── cards.md │ ├── dropdown.md │ ├── inputs.md │ ├── maps.md │ ├── modal.md │ ├── navbars.md │ ├── notifications.md │ ├── progress.md │ ├── radio.md │ ├── select.md │ ├── sliders.md │ ├── tables.md │ └── tabs.md ├── examples │ ├── api-instalation.md │ ├── download.md │ ├── login.md │ ├── profile.md │ └── register.md ├── folder-structure.md ├── general-tips.md ├── licence.md ├── package-lock.json └── package.json ├── package-lock.json ├── package.json ├── public ├── favicon.png ├── img │ ├── icons │ │ ├── android-chrome-192x192.png │ │ ├── android-chrome-512x512.png │ │ ├── apple-touch-icon-120x120.png │ │ ├── apple-touch-icon-152x152.png │ │ ├── apple-touch-icon-180x180.png │ │ ├── apple-touch-icon-60x60.png │ │ ├── apple-touch-icon-76x76.png │ │ ├── apple-touch-icon.png │ │ ├── favicon-16x16.png │ │ ├── favicon-32x32.png │ │ ├── msapplication-icon-144x144.png │ │ ├── mstile-150x150.png │ │ └── safari-pinned-tab.svg │ ├── laravel-vue.svg │ └── placeholder.jpg ├── index.html ├── manifest.json ├── robots.txt └── static │ ├── .gitkeep │ └── img │ ├── apple-icon.png │ ├── background-2.jpg │ ├── background.jpg │ ├── background │ ├── background-2.jpg │ ├── bruno-abatti.jpg │ ├── damir-bosnjak.jpg │ ├── daniel-olahs.jpg │ ├── david-marcu.jpg │ └── jan-sendereks.jpg │ ├── default-avatar.png │ ├── faces │ ├── ayo-ogunseinde-2.jpg │ ├── erik-lucatero-2.jpg │ ├── face-0.jpg │ ├── face-1.jpg │ ├── face-2.jpg │ ├── face-3.jpg │ ├── joe-gardner-1.jpg │ ├── joe-gardner-2.jpg │ └── kaci-baum-2.jpg │ ├── favicon.png │ ├── jan-sendereks.jpg │ ├── mike.jpg │ ├── placeholder.jpg │ ├── tables │ ├── agenda.png │ ├── evernote.png │ └── stylus.jpg │ └── vue-logo.png ├── src ├── App.vue ├── assets │ ├── css │ │ ├── custom.css │ │ └── themify-icons.css │ ├── custom.css │ ├── fonts │ │ ├── glyphicons-halflings-regular.448c34a.woff2 │ │ ├── glyphicons-halflings-regular.e18bbf6.ttf │ │ ├── glyphicons-halflings-regular.f4769f9.eot │ │ ├── glyphicons-halflings-regular.fa27723.woff │ │ ├── nucleo-icons.eot │ │ ├── nucleo-icons.ttf │ │ ├── nucleo-icons.woff │ │ ├── nucleo-icons.woff2 │ │ ├── themify.eot │ │ ├── themify.svg │ │ ├── themify.ttf │ │ └── themify.woff │ ├── img │ │ ├── apple-icon.png │ │ ├── background.jpg │ │ ├── faces │ │ │ ├── face-0.jpg │ │ │ ├── face-1.jpg │ │ │ ├── face-2.jpg │ │ │ └── face-3.jpg │ │ ├── favicon.png │ │ ├── glyphicons-halflings-regular.8988968.svg │ │ ├── new_logo.png │ │ ├── tim_80x80.png │ │ └── vue-logo.png │ └── sass │ │ ├── demo.scss │ │ ├── paper-dashboard.scss │ │ └── paper │ │ ├── _alerts.scss │ │ ├── _badges.scss │ │ ├── _button-icon.scss │ │ ├── _buttons.scss │ │ ├── _card-signup.scss │ │ ├── _cards.scss │ │ ├── _checkboxes-radio.scss │ │ ├── _dropdown.scss │ │ ├── _example-pages.scss │ │ ├── _fixed-social-plugin.scss │ │ ├── _footers.scss │ │ ├── _images.scss │ │ ├── _info-areas.scss │ │ ├── _inputs.scss │ │ ├── _media-queries.scss │ │ ├── _misc-extend.scss │ │ ├── _misc.scss │ │ ├── _mixins.scss │ │ ├── _modals.scss │ │ ├── _navbar.scss │ │ ├── _nucleo-outline.scss │ │ ├── _pagination.scss │ │ ├── _pills.scss │ │ ├── _progress.scss │ │ ├── _responsive.scss │ │ ├── _sections.scss │ │ ├── _sidebar-and-main-panel.scss │ │ ├── _social-buttons.scss │ │ ├── _tables.scss │ │ ├── _tabs.scss │ │ ├── _timeline.scss │ │ ├── _typography.scss │ │ ├── _variables.scss │ │ ├── cards │ │ ├── _card-background.scss │ │ ├── _card-chart.scss │ │ ├── _card-collapse.scss │ │ ├── _card-contributions.scss │ │ ├── _card-info-area.scss │ │ ├── _card-lock.scss │ │ ├── _card-map.scss │ │ ├── _card-plain.scss │ │ ├── _card-pricing.scss │ │ ├── _card-profile.scss │ │ ├── _card-signup.scss │ │ ├── _card-stats-mini.scss │ │ ├── _card-stats.scss │ │ ├── _card-subcategories.scss │ │ ├── _card-tasks.scss │ │ ├── _card-testimonials.scss │ │ └── _card-user.scss │ │ ├── mixins │ │ ├── _badges.scss │ │ ├── _buttons.scss │ │ ├── _cards.scss │ │ ├── _chartist.scss │ │ ├── _dropdown.scss │ │ ├── _icons.scss │ │ ├── _inputs.scss │ │ ├── _labels.scss │ │ ├── _modals.scss │ │ ├── _navbars.scss │ │ ├── _page-header.scss │ │ ├── _popovers.scss │ │ ├── _sidebar.scss │ │ ├── _social-buttons.scss │ │ ├── _tabs.scss │ │ ├── _tags.scss │ │ ├── _transparency.scss │ │ ├── _vendor-prefixes-extend.scss │ │ ├── _vendor-prefixes.scss │ │ └── _wizard.scss │ │ └── plugins │ │ ├── _plugin-bootstrap-switch.scss │ │ ├── _plugin-card-wizard.scss │ │ ├── _plugin-jquery.jvectormap.scss │ │ ├── _plugin-nprogress.scss │ │ ├── _plugin-perfect-scrollbar.scss │ │ ├── _plugin-sweetalert2.scss │ │ ├── _plugin-vue-notifyjs.scss │ │ └── element-ui │ │ ├── _plugin-inputs.scss │ │ ├── _plugin-select.scss │ │ ├── _plugin-slider.scss │ │ ├── _plugin-tables.scss │ │ └── _plugin-tags.scss ├── components │ ├── Dashboard │ │ ├── Layout │ │ │ ├── Content.vue │ │ │ ├── ContentFooter.vue │ │ │ ├── DashboardLayout.vue │ │ │ ├── LoadingMainPanel.vue │ │ │ ├── SidebarSharePlugin.vue │ │ │ └── TopNavbar.vue │ │ └── Views │ │ │ ├── Charts.vue │ │ │ ├── Components │ │ │ ├── Buttons.vue │ │ │ ├── GridSystem.vue │ │ │ ├── Icons.vue │ │ │ ├── NotificationTemplate.vue │ │ │ ├── Notifications.vue │ │ │ ├── Panels.vue │ │ │ ├── SweetAlert.vue │ │ │ └── Typography.vue │ │ │ ├── Dashboard │ │ │ ├── Overview.vue │ │ │ ├── Widgets.vue │ │ │ └── Widgets │ │ │ │ ├── Task.vue │ │ │ │ └── TaskList.vue │ │ │ ├── Examples │ │ │ ├── UserManagement │ │ │ │ └── ListUserPage.vue │ │ │ ├── UserProfile.vue │ │ │ └── UserProfile │ │ │ │ ├── EditPasswordCard.vue │ │ │ │ └── EditProfileCard.vue │ │ │ ├── Maps │ │ │ ├── API_KEY.js │ │ │ └── GoogleMaps.vue │ │ │ ├── Pages │ │ │ ├── Layout │ │ │ │ ├── AppFooter.vue │ │ │ │ └── AppNavbar.vue │ │ │ ├── Lock.vue │ │ │ ├── Login.vue │ │ │ ├── Register.vue │ │ │ ├── TimeLinePage.vue │ │ │ ├── UserProfile.vue │ │ │ └── UserProfile │ │ │ │ ├── EditProfileForm.vue │ │ │ │ ├── MembersCard.vue │ │ │ │ └── UserCard.vue │ │ │ ├── Password │ │ │ ├── Email.vue │ │ │ └── Reset.vue │ │ │ └── Tables │ │ │ ├── RegularTables.vue │ │ │ └── users.js │ ├── GeneralViews │ │ └── NotFoundPage.vue │ └── UIComponents │ │ ├── Badge.vue │ │ ├── Button.vue │ │ ├── Cards │ │ ├── Card.vue │ │ ├── ChartCard.vue │ │ ├── CircleChartCard.vue │ │ └── StatsCard.vue │ │ ├── Charts │ │ ├── BarChart.js │ │ ├── DoughnutChart.js │ │ ├── LineChart.js │ │ ├── PieChart.js │ │ ├── mixins │ │ │ └── reactiveChart.js │ │ ├── plugins │ │ │ └── plugin-chart-text.js │ │ └── utils.js │ │ ├── Collapse │ │ ├── Collapse.vue │ │ └── CollapseItem.vue │ │ ├── Dropdown.vue │ │ ├── InfoSection.vue │ │ ├── Inputs │ │ ├── Checkbox.vue │ │ ├── IconCheckbox.vue │ │ ├── Radio.vue │ │ └── formGroupInput.vue │ │ ├── Modal.vue │ │ ├── Navbar │ │ ├── Navbar.vue │ │ └── NavbarToggleButton.vue │ │ ├── Pagination.vue │ │ ├── Progress.vue │ │ ├── SidebarPlugin │ │ ├── SideBar.vue │ │ ├── SidebarItem.vue │ │ ├── SidebarLink.vue │ │ ├── UserMenu.vue │ │ └── index.js │ │ ├── Switch.vue │ │ ├── Tabs │ │ ├── PillsLayout.vue │ │ ├── Tab.vue │ │ ├── Tabs.vue │ │ └── TabsLayout.vue │ │ ├── TimeLine │ │ ├── TimeLine.vue │ │ └── TimeLineItem.vue │ │ ├── ValidationError.vue │ │ ├── Wizard │ │ ├── Wizard.vue │ │ └── WizardTab.vue │ │ └── index.js ├── globalComponents.js ├── globalDirectives.js ├── isDemo.js ├── main.js ├── middleware │ ├── auth.js │ └── guest.js ├── mixins │ └── form-mixin.js ├── pollyfills.js ├── progressbar.js ├── registerServiceWorker.js ├── router │ ├── index.js │ └── routes.js ├── sidebarLinks.js ├── store │ ├── index.js │ ├── modules │ │ ├── alerts-module.js │ │ ├── auth.js │ │ ├── profile-module.js │ │ ├── reset.js │ │ └── users-module.js │ └── services │ │ ├── profile-service.js │ │ └── users-service.js └── util │ └── throttle.js ├── vue.config.js └── yarn.lock /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | All notable changes to `Vue Paper Dashboard Laravel` will be documented in this file. 4 | 5 | ## Version 1.0.0 6 | 7 | ### Added 8 | - Vue Paper Dashboard Free 9 | - Login 10 | - Register 11 | - Profile edit 12 | 13 | ## Version 1.0.1 14 | Update to Laravel 9.x 15 | 16 | ## Version 1.1.0 17 | Update to Laravel 11.x 18 | -------------------------------------------------------------------------------- /ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | # Prerequisites 2 | 3 | Please answer the following questions for yourself before submitting an issue. 4 | 5 | - [ ] I am running the latest version 6 | - [ ] I checked the documentation and found no answer 7 | - [ ] I checked to make sure that this issue has not already been filed 8 | - [ ] I'm reporting the issue to the correct repository (for multi-repository projects) 9 | 10 | # Expected Behavior 11 | 12 | Please describe the behavior you are expecting 13 | 14 | # Current Behavior 15 | 16 | What is the current behavior? 17 | 18 | # Failure Information (for bugs) 19 | 20 | Please help provide information about the failure if this is a bug. If it is not a bug, please remove the rest of this template. 21 | 22 | ## Steps to Reproduce 23 | 24 | Please provide detailed steps for reproducing the issue. 25 | 26 | 1. step 1 27 | 2. step 2 28 | 3. you get it... 29 | 30 | ## Context 31 | 32 | Please provide any relevant information about your setup. This is important in case the issue is not reproducible except for under certain conditions. 33 | 34 | * Device: 35 | * Operating System: 36 | * Browser and Version: 37 | 38 | ## Failure Logs 39 | 40 | Please include any relevant log snippets or files here. 41 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Creative Tim (www.creative-tim.com) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /laravel-json-api/.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | end_of_line = lf 6 | indent_size = 4 7 | indent_style = space 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.md] 12 | trim_trailing_whitespace = false 13 | 14 | [*.{yml,yaml}] 15 | indent_size = 2 16 | 17 | [docker-compose.yml] 18 | indent_size = 4 19 | -------------------------------------------------------------------------------- /laravel-json-api/.env.example: -------------------------------------------------------------------------------- 1 | APP_NAME=Laravel 2 | APP_ENV=local 3 | APP_KEY= 4 | APP_DEBUG=true 5 | APP_URL=http://localhost 6 | 7 | IS_DEMO=false 8 | 9 | LOG_CHANNEL=stack 10 | LOG_DEPRECATIONS_CHANNEL=null 11 | LOG_LEVEL=debug 12 | 13 | DB_CONNECTION=mysql 14 | DB_HOST=127.0.0.1 15 | DB_PORT=3306 16 | DB_DATABASE=laravel 17 | DB_USERNAME=root 18 | DB_PASSWORD= 19 | 20 | BROADCAST_DRIVER=log 21 | CACHE_DRIVER=file 22 | FILESYSTEM_DISK=local 23 | QUEUE_CONNECTION=sync 24 | SESSION_DRIVER=file 25 | SESSION_LIFETIME=120 26 | 27 | MEMCACHED_HOST=127.0.0.1 28 | 29 | REDIS_HOST=127.0.0.1 30 | REDIS_PASSWORD=null 31 | REDIS_PORT=6379 32 | 33 | MAIL_MAILER=smtp 34 | MAIL_HOST=mailhog 35 | MAIL_PORT=1025 36 | MAIL_USERNAME=null 37 | MAIL_PASSWORD=null 38 | MAIL_ENCRYPTION=null 39 | MAIL_FROM_ADDRESS="hello@example.com" 40 | MAIL_FROM_NAME="${APP_NAME}" 41 | 42 | AWS_ACCESS_KEY_ID= 43 | AWS_SECRET_ACCESS_KEY= 44 | AWS_DEFAULT_REGION=us-east-1 45 | AWS_BUCKET= 46 | AWS_USE_PATH_STYLE_ENDPOINT=false 47 | 48 | PUSHER_APP_ID= 49 | PUSHER_APP_KEY= 50 | PUSHER_APP_SECRET= 51 | PUSHER_HOST= 52 | PUSHER_PORT=443 53 | PUSHER_SCHEME=https 54 | PUSHER_APP_CLUSTER=mt1 55 | 56 | VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}" 57 | VITE_PUSHER_HOST="${PUSHER_HOST}" 58 | VITE_PUSHER_PORT="${PUSHER_PORT}" 59 | VITE_PUSHER_SCHEME="${PUSHER_SCHEME}" 60 | VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" 61 | -------------------------------------------------------------------------------- /laravel-json-api/.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | 3 | *.blade.php diff=html 4 | *.css diff=css 5 | *.html diff=html 6 | *.md diff=markdown 7 | *.php diff=php 8 | 9 | /.github export-ignore 10 | CHANGELOG.md export-ignore 11 | .styleci.yml export-ignore 12 | -------------------------------------------------------------------------------- /laravel-json-api/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | /public/build 3 | /public/hot 4 | /public/storage 5 | /storage/*.key 6 | /vendor 7 | .env 8 | .env.backup 9 | .env.production 10 | .phpunit.result.cache 11 | Homestead.json 12 | Homestead.yaml 13 | auth.json 14 | npm-debug.log 15 | yarn-error.log 16 | /.fleet 17 | /.idea 18 | /.vscode 19 | -------------------------------------------------------------------------------- /laravel-json-api/.rnd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/laravel-json-api/.rnd -------------------------------------------------------------------------------- /laravel-json-api/app/Console/Commands/ResetDefaultUsers.php: -------------------------------------------------------------------------------- 1 | update(['name' => 'Admin', 'email' => 'admin@jsonapi.com', 'password' => 'secret']); 34 | $users = User::where('id', '!=', '1'); 35 | $users->delete(); 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /laravel-json-api/app/Console/Kernel.php: -------------------------------------------------------------------------------- 1 | command('app:reset-default-users')->cron($scheduledInterval); 23 | } 24 | } 25 | 26 | /** 27 | * Register the commands for the application. 28 | * 29 | * @return void 30 | */ 31 | protected function commands() 32 | { 33 | $this->load(__DIR__.'/Commands'); 34 | 35 | require base_path('routes/console.php'); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /laravel-json-api/app/Exceptions/Handler.php: -------------------------------------------------------------------------------- 1 | , \Psr\Log\LogLevel::*> 15 | */ 16 | protected $levels = [ 17 | // 18 | ]; 19 | 20 | /** 21 | * A list of the exception types that are not reported. 22 | * 23 | * @var array> 24 | */ 25 | protected $dontReport = [ 26 | JsonApiException::class, 27 | ]; 28 | 29 | /** 30 | * A list of the inputs that are never flashed to the session on validation exceptions. 31 | * 32 | * @var array 33 | */ 34 | protected $dontFlash = [ 35 | 'current_password', 36 | 'password', 37 | 'password_confirmation', 38 | ]; 39 | 40 | /** 41 | * Register the exception handling callbacks for the application. 42 | * 43 | * @return void 44 | */ 45 | public function register() 46 | { 47 | $this->renderable( 48 | \LaravelJsonApi\Exceptions\ExceptionParser::make()->renderable() 49 | ); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /laravel-json-api/app/Http/Controllers/Api/V2/Auth/LoginController.php: -------------------------------------------------------------------------------- 1 | where('password_client', 1)->first(); 25 | 26 | $request = Request::create(config('app.url') . '/oauth/token', 'POST', [ 27 | 'grant_type' => 'password', 28 | 'client_id' => $client->id, 29 | 'client_secret' => $client->secret, 30 | 'username' => $request->email, 31 | 'password' => $request->password, 32 | 'scope' => '', 33 | ]); 34 | 35 | /** @var \Illuminate\Http\Response $response */ 36 | $response = app()->handle($request); 37 | 38 | if ($response->getStatusCode() !== Response::HTTP_OK) { 39 | return Error::fromArray([ 40 | 'title' => Response::$statusTexts[Response::HTTP_BAD_REQUEST], 41 | 'detail' => $response->exception->getMessage(), 42 | 'status' => Response::HTTP_BAD_REQUEST, 43 | ]); 44 | } 45 | 46 | return $response; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /laravel-json-api/app/Http/Controllers/Api/V2/Auth/LogoutController.php: -------------------------------------------------------------------------------- 1 | user()->token()->revoke(); 21 | 22 | return response()->json([], Response::HTTP_NO_CONTENT); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /laravel-json-api/app/Http/Controllers/Api/V2/Auth/RegisterController.php: -------------------------------------------------------------------------------- 1 | $request->name, 26 | 'email' => $request->email, 27 | 'password' => $request->password, 28 | ]); 29 | 30 | return (new LoginController)(new LoginRequest($request->only(['email', 'password']))); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /laravel-json-api/app/Http/Controllers/Controller.php: -------------------------------------------------------------------------------- 1 | expectsJson()) { 18 | return route('login'); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /laravel-json-api/app/Http/Middleware/EncryptCookies.php: -------------------------------------------------------------------------------- 1 | 13 | */ 14 | protected $except = [ 15 | // 16 | ]; 17 | } 18 | -------------------------------------------------------------------------------- /laravel-json-api/app/Http/Middleware/JsonApi.php: -------------------------------------------------------------------------------- 1 | has('data')) { 21 | $input = $request->data['attributes']; 22 | 23 | $request->replace($input); 24 | } 25 | 26 | return $next($request); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /laravel-json-api/app/Http/Middleware/PreventRequestsDuringMaintenance.php: -------------------------------------------------------------------------------- 1 | 13 | */ 14 | protected $except = [ 15 | // 16 | ]; 17 | } 18 | -------------------------------------------------------------------------------- /laravel-json-api/app/Http/Middleware/RedirectIfAuthenticated.php: -------------------------------------------------------------------------------- 1 | check()) { 26 | return redirect(RouteServiceProvider::HOME); 27 | } 28 | } 29 | 30 | return $next($request); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /laravel-json-api/app/Http/Middleware/TrimStrings.php: -------------------------------------------------------------------------------- 1 | 13 | */ 14 | protected $except = [ 15 | 'current_password', 16 | 'password', 17 | 'password_confirmation', 18 | ]; 19 | } 20 | -------------------------------------------------------------------------------- /laravel-json-api/app/Http/Middleware/TrustHosts.php: -------------------------------------------------------------------------------- 1 | 13 | */ 14 | public function hosts() 15 | { 16 | return [ 17 | $this->allSubdomainsOfApplicationUrl(), 18 | ]; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /laravel-json-api/app/Http/Middleware/TrustProxies.php: -------------------------------------------------------------------------------- 1 | |string|null 14 | */ 15 | protected $proxies; 16 | 17 | /** 18 | * The headers that should be used to detect proxies. 19 | * 20 | * @var int 21 | */ 22 | protected $headers = 23 | Request::HEADER_X_FORWARDED_FOR | 24 | Request::HEADER_X_FORWARDED_HOST | 25 | Request::HEADER_X_FORWARDED_PORT | 26 | Request::HEADER_X_FORWARDED_PROTO | 27 | Request::HEADER_X_FORWARDED_AWS_ELB; 28 | } 29 | -------------------------------------------------------------------------------- /laravel-json-api/app/Http/Middleware/ValidateSignature.php: -------------------------------------------------------------------------------- 1 | 13 | */ 14 | protected $except = [ 15 | // 'fbclid', 16 | // 'utm_campaign', 17 | // 'utm_content', 18 | // 'utm_medium', 19 | // 'utm_source', 20 | // 'utm_term', 21 | ]; 22 | } 23 | -------------------------------------------------------------------------------- /laravel-json-api/app/Http/Middleware/VerifyCsrfToken.php: -------------------------------------------------------------------------------- 1 | 13 | */ 14 | protected $except = [ 15 | // 16 | ]; 17 | } 18 | -------------------------------------------------------------------------------- /laravel-json-api/app/Http/Requests/Api/V2/Auth/ForgotPasswordRequest.php: -------------------------------------------------------------------------------- 1 | 23 | */ 24 | public function rules() 25 | { 26 | return [ 27 | 'redirect_url' => ['required', 'url'], 28 | 'email' => ['required', 'email', 'exists:users,email'], 29 | ]; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /laravel-json-api/app/Http/Requests/Api/V2/Auth/LoginRequest.php: -------------------------------------------------------------------------------- 1 | 23 | */ 24 | public function rules() 25 | { 26 | return [ 27 | 'email' => ['required', 'email', 'exists:users,email'], 28 | 'password' => ['required'] 29 | ]; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /laravel-json-api/app/Http/Requests/Api/V2/Auth/RegisterRequest.php: -------------------------------------------------------------------------------- 1 | 23 | */ 24 | public function rules() 25 | { 26 | return [ 27 | 'name' => ['required', 'string', 'max:255'], 28 | 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], 29 | 'password' => ['required', 'string', 'min:8', 'confirmed'], 30 | ]; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /laravel-json-api/app/Http/Requests/Api/V2/Auth/ResetPasswordRequest.php: -------------------------------------------------------------------------------- 1 | 23 | */ 24 | public function rules() 25 | { 26 | return [ 27 | 'token' => ['required'], 28 | 'email' => ['required', 'email'], 29 | 'password' => ['required', 'confirmed', 'min:8'], 30 | ]; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /laravel-json-api/app/JsonApi/V2/Server.php: -------------------------------------------------------------------------------- 1 | model()) { 21 | return [ 22 | 'name' => ['sometimes', 'string'], 23 | 'email' => ['sometimes', 'email', Rule::unique('users')->ignore($model->id)], 24 | 'password' => ['sometimes', 'confirmed', 'string', 'min:8'], 25 | ]; 26 | } 27 | 28 | return [ 29 | 'name' => ['required', 'string'], 30 | 'email' => ['required', 'email', Rule::unique('users')], 31 | 'password' => ['required', 'confirmed', 'string', 'min:8'], 32 | ]; 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /laravel-json-api/app/Models/User.php: -------------------------------------------------------------------------------- 1 | 22 | */ 23 | protected $fillable = [ 24 | 'name', 25 | 'email', 26 | 'password', 27 | ]; 28 | 29 | /** 30 | * The attributes that should be hidden for serialization. 31 | * 32 | * @var array 33 | */ 34 | protected $hidden = [ 35 | 'password', 36 | 'remember_token', 37 | ]; 38 | 39 | /** 40 | * The attributes that should be cast. 41 | * 42 | * @var array 43 | */ 44 | protected $casts = [ 45 | 'email_verified_at' => 'datetime', 46 | ]; 47 | 48 | /** 49 | * Mutator for hashing the password on save 50 | * 51 | * @param string $value 52 | * @return void 53 | */ 54 | public function setPasswordAttribute($value) 55 | { 56 | $this->attributes['password'] = Hash::make($value); 57 | } 58 | 59 | /** 60 | * Send the password reset notification. 61 | * 62 | * @param string $token 63 | * @return void 64 | */ 65 | public function sendPasswordResetNotification($token) 66 | { 67 | $this->notify(new ResetPasswordNotification($token)); 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /laravel-json-api/app/Notifications/Auth/ResetPasswordNotification.php: -------------------------------------------------------------------------------- 1 | token = $token; 26 | $this->url = request()->get('redirect_url'); 27 | } 28 | /** 29 | * Get the mail representation of the notification. 30 | * 31 | * @param mixed $notifiable 32 | * @return \Illuminate\Notifications\Messages\MailMessage 33 | */ 34 | public function toMail($notifiable) 35 | { 36 | if (static::$toMailCallback) { 37 | return call_user_func(static::$toMailCallback, $notifiable, $this->token); 38 | } 39 | 40 | return (new MailMessage) 41 | ->subject(Lang::get('Reset Password Notification')) 42 | ->line(Lang::get('You are receiving this email because we received a password reset request for your account.')) 43 | ->action(Lang::get('Reset Password'), url("{$this->url}?token={$this->token}&email={$notifiable->getEmailForPasswordReset()}")) 44 | ->line(Lang::get('This password reset link will expire in :count minutes.', ['count' => config('auth.passwords.'.config('auth.defaults.passwords').'.expire')])) 45 | ->line(Lang::get('If you did not request a password reset, no further action is required.')); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /laravel-json-api/app/Providers/AppServiceProvider.php: -------------------------------------------------------------------------------- 1 | 15 | */ 16 | protected $policies = [ 17 | 'App\Models\Model' => 'App\Policies\ModelPolicy', 18 | ]; 19 | 20 | /** 21 | * Register any authentication / authorization services. 22 | * 23 | * @return void 24 | */ 25 | public function boot() 26 | { 27 | $this->registerPolicies(); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /laravel-json-api/app/Providers/BroadcastServiceProvider.php: -------------------------------------------------------------------------------- 1 | > 16 | */ 17 | protected $listen = [ 18 | Registered::class => [ 19 | SendEmailVerificationNotification::class, 20 | ], 21 | ]; 22 | 23 | /** 24 | * Register any events for your application. 25 | * 26 | * @return void 27 | */ 28 | public function boot() 29 | { 30 | // 31 | } 32 | 33 | /** 34 | * Determine if events and listeners should be automatically discovered. 35 | * 36 | * @return bool 37 | */ 38 | public function shouldDiscoverEvents() 39 | { 40 | return false; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /laravel-json-api/app/Providers/RouteServiceProvider.php: -------------------------------------------------------------------------------- 1 | configureRateLimiting(); 30 | 31 | $this->routes(function () { 32 | Route::middleware('api') 33 | ->prefix('api') 34 | ->group(base_path('routes/api.php')); 35 | 36 | Route::middleware('web') 37 | ->group(base_path('routes/web.php')); 38 | }); 39 | } 40 | 41 | /** 42 | * Configure the rate limiters for the application. 43 | * 44 | * @return void 45 | */ 46 | protected function configureRateLimiting() 47 | { 48 | RateLimiter::for('api', function (Request $request) { 49 | return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip()); 50 | }); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /laravel-json-api/artisan: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env php 2 | make(Illuminate\Contracts\Console\Kernel::class); 34 | 35 | $status = $kernel->handle( 36 | $input = new Symfony\Component\Console\Input\ArgvInput, 37 | new Symfony\Component\Console\Output\ConsoleOutput 38 | ); 39 | 40 | /* 41 | |-------------------------------------------------------------------------- 42 | | Shutdown The Application 43 | |-------------------------------------------------------------------------- 44 | | 45 | | Once Artisan has finished running, we will fire off the shutdown events 46 | | so that any final work may be done by the application before we shut 47 | | down the process. This is the last thing to happen to the request. 48 | | 49 | */ 50 | 51 | $kernel->terminate($input, $status); 52 | 53 | exit($status); 54 | -------------------------------------------------------------------------------- /laravel-json-api/bootstrap/app.php: -------------------------------------------------------------------------------- 1 | singleton( 30 | Illuminate\Contracts\Http\Kernel::class, 31 | App\Http\Kernel::class 32 | ); 33 | 34 | $app->singleton( 35 | Illuminate\Contracts\Console\Kernel::class, 36 | App\Console\Kernel::class 37 | ); 38 | 39 | $app->singleton( 40 | Illuminate\Contracts\Debug\ExceptionHandler::class, 41 | App\Exceptions\Handler::class 42 | ); 43 | 44 | /* 45 | |-------------------------------------------------------------------------- 46 | | Return The Application 47 | |-------------------------------------------------------------------------- 48 | | 49 | | This script returns the application instance. The instance is given to 50 | | the calling script so we can separate the building of the instances 51 | | from the actual running of the application and sending responses. 52 | | 53 | */ 54 | 55 | return $app; 56 | -------------------------------------------------------------------------------- /laravel-json-api/bootstrap/cache/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /laravel-json-api/config/cors.php: -------------------------------------------------------------------------------- 1 | ['api/*', 'sanctum/csrf-cookie'], 19 | 20 | 'allowed_methods' => ['*'], 21 | 22 | 'allowed_origins' => ['*'], 23 | 24 | 'allowed_origins_patterns' => [], 25 | 26 | 'allowed_headers' => ['*'], 27 | 28 | 'exposed_headers' => [], 29 | 30 | 'max_age' => 0, 31 | 32 | 'supports_credentials' => false, 33 | 34 | ]; 35 | -------------------------------------------------------------------------------- /laravel-json-api/config/hashing.php: -------------------------------------------------------------------------------- 1 | 'bcrypt', 19 | 20 | /* 21 | |-------------------------------------------------------------------------- 22 | | Bcrypt Options 23 | |-------------------------------------------------------------------------- 24 | | 25 | | Here you may specify the configuration options that should be used when 26 | | passwords are hashed using the Bcrypt algorithm. This will allow you 27 | | to control the amount of time it takes to hash the given password. 28 | | 29 | */ 30 | 31 | 'bcrypt' => [ 32 | 'rounds' => env('BCRYPT_ROUNDS', 10), 33 | ], 34 | 35 | /* 36 | |-------------------------------------------------------------------------- 37 | | Argon Options 38 | |-------------------------------------------------------------------------- 39 | | 40 | | Here you may specify the configuration options that should be used when 41 | | passwords are hashed using the Argon algorithm. These will allow you 42 | | to control the amount of time it takes to hash the given password. 43 | | 44 | */ 45 | 46 | 'argon' => [ 47 | 'memory' => 65536, 48 | 'threads' => 1, 49 | 'time' => 4, 50 | ], 51 | 52 | ]; 53 | -------------------------------------------------------------------------------- /laravel-json-api/config/jsonapi.php: -------------------------------------------------------------------------------- 1 | 'JsonApi', 18 | 19 | /* 20 | |-------------------------------------------------------------------------- 21 | | Servers 22 | |-------------------------------------------------------------------------- 23 | | 24 | | A list of the JSON:API compliant APIs in your application, referred to 25 | | as "servers". They must be listed below, with the array key being the 26 | | unique name for each server, and the value being the fully-qualified 27 | | class name of the server class. 28 | */ 29 | 'servers' => [ 30 | 'v2' => \App\JsonApi\V2\Server::class, 31 | ], 32 | ]; 33 | -------------------------------------------------------------------------------- /laravel-json-api/config/services.php: -------------------------------------------------------------------------------- 1 | [ 18 | 'domain' => env('MAILGUN_DOMAIN'), 19 | 'secret' => env('MAILGUN_SECRET'), 20 | 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'), 21 | 'scheme' => 'https', 22 | ], 23 | 24 | 'postmark' => [ 25 | 'token' => env('POSTMARK_TOKEN'), 26 | ], 27 | 28 | 'ses' => [ 29 | 'key' => env('AWS_ACCESS_KEY_ID'), 30 | 'secret' => env('AWS_SECRET_ACCESS_KEY'), 31 | 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), 32 | ], 33 | 34 | ]; 35 | -------------------------------------------------------------------------------- /laravel-json-api/config/view.php: -------------------------------------------------------------------------------- 1 | [ 17 | resource_path('views'), 18 | ], 19 | 20 | /* 21 | |-------------------------------------------------------------------------- 22 | | Compiled View Path 23 | |-------------------------------------------------------------------------- 24 | | 25 | | This option determines where all the compiled Blade templates will be 26 | | stored for your application. Typically, this is within the storage 27 | | directory. However, as usual, you are free to change this value. 28 | | 29 | */ 30 | 31 | 'compiled' => env( 32 | 'VIEW_COMPILED_PATH', 33 | realpath(storage_path('framework/views')) 34 | ), 35 | 36 | ]; 37 | -------------------------------------------------------------------------------- /laravel-json-api/database/.gitignore: -------------------------------------------------------------------------------- 1 | *.sqlite* 2 | -------------------------------------------------------------------------------- /laravel-json-api/database/factories/UserFactory.php: -------------------------------------------------------------------------------- 1 | 10 | */ 11 | class UserFactory extends Factory 12 | { 13 | /** 14 | * Define the model's default state. 15 | * 16 | * @return array 17 | */ 18 | public function definition() 19 | { 20 | return [ 21 | 'name' => fake()->name(), 22 | 'email' => fake()->unique()->safeEmail(), 23 | 'email_verified_at' => now(), 24 | 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password 25 | 'remember_token' => Str::random(10), 26 | ]; 27 | } 28 | 29 | /** 30 | * Indicate that the model's email address should be unverified. 31 | * 32 | * @return static 33 | */ 34 | public function unverified() 35 | { 36 | return $this->state(fn (array $attributes) => [ 37 | 'email_verified_at' => null, 38 | ]); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /laravel-json-api/database/migrations/2014_10_12_000000_create_users_table.php: -------------------------------------------------------------------------------- 1 | id(); 18 | $table->string('name'); 19 | $table->string('email')->unique(); 20 | $table->timestamp('email_verified_at')->nullable(); 21 | $table->string('password'); 22 | $table->rememberToken(); 23 | $table->timestamps(); 24 | }); 25 | } 26 | 27 | /** 28 | * Reverse the migrations. 29 | * 30 | * @return void 31 | */ 32 | public function down() 33 | { 34 | Schema::dropIfExists('users'); 35 | } 36 | }; 37 | -------------------------------------------------------------------------------- /laravel-json-api/database/migrations/2014_10_12_100000_create_password_resets_table.php: -------------------------------------------------------------------------------- 1 | string('email')->index(); 18 | $table->string('token'); 19 | $table->timestamp('created_at')->nullable(); 20 | }); 21 | } 22 | 23 | /** 24 | * Reverse the migrations. 25 | * 26 | * @return void 27 | */ 28 | public function down() 29 | { 30 | Schema::dropIfExists('password_resets'); 31 | } 32 | }; 33 | -------------------------------------------------------------------------------- /laravel-json-api/database/migrations/2016_06_01_000001_create_oauth_auth_codes_table.php: -------------------------------------------------------------------------------- 1 | string('id', 100)->primary(); 16 | $table->unsignedBigInteger('user_id')->index(); 17 | $table->unsignedBigInteger('client_id'); 18 | $table->text('scopes')->nullable(); 19 | $table->boolean('revoked'); 20 | $table->dateTime('expires_at')->nullable(); 21 | }); 22 | } 23 | 24 | /** 25 | * Reverse the migrations. 26 | */ 27 | public function down(): void 28 | { 29 | Schema::dropIfExists('oauth_auth_codes'); 30 | } 31 | }; 32 | -------------------------------------------------------------------------------- /laravel-json-api/database/migrations/2016_06_01_000002_create_oauth_access_tokens_table.php: -------------------------------------------------------------------------------- 1 | string('id', 100)->primary(); 16 | $table->unsignedBigInteger('user_id')->nullable()->index(); 17 | $table->unsignedBigInteger('client_id'); 18 | $table->string('name')->nullable(); 19 | $table->text('scopes')->nullable(); 20 | $table->boolean('revoked'); 21 | $table->timestamps(); 22 | $table->dateTime('expires_at')->nullable(); 23 | }); 24 | } 25 | 26 | /** 27 | * Reverse the migrations. 28 | */ 29 | public function down(): void 30 | { 31 | Schema::dropIfExists('oauth_access_tokens'); 32 | } 33 | }; 34 | -------------------------------------------------------------------------------- /laravel-json-api/database/migrations/2016_06_01_000003_create_oauth_refresh_tokens_table.php: -------------------------------------------------------------------------------- 1 | string('id', 100)->primary(); 16 | $table->string('access_token_id', 100)->index(); 17 | $table->boolean('revoked'); 18 | $table->dateTime('expires_at')->nullable(); 19 | }); 20 | } 21 | 22 | /** 23 | * Reverse the migrations. 24 | */ 25 | public function down(): void 26 | { 27 | Schema::dropIfExists('oauth_refresh_tokens'); 28 | } 29 | }; 30 | -------------------------------------------------------------------------------- /laravel-json-api/database/migrations/2016_06_01_000004_create_oauth_clients_table.php: -------------------------------------------------------------------------------- 1 | bigIncrements('id'); 16 | $table->unsignedBigInteger('user_id')->nullable()->index(); 17 | $table->string('name'); 18 | $table->string('secret', 100)->nullable(); 19 | $table->string('provider')->nullable(); 20 | $table->text('redirect'); 21 | $table->boolean('personal_access_client'); 22 | $table->boolean('password_client'); 23 | $table->boolean('revoked'); 24 | $table->timestamps(); 25 | }); 26 | } 27 | 28 | /** 29 | * Reverse the migrations. 30 | */ 31 | public function down(): void 32 | { 33 | Schema::dropIfExists('oauth_clients'); 34 | } 35 | }; 36 | -------------------------------------------------------------------------------- /laravel-json-api/database/migrations/2016_06_01_000005_create_oauth_personal_access_clients_table.php: -------------------------------------------------------------------------------- 1 | bigIncrements('id'); 16 | $table->unsignedBigInteger('client_id'); 17 | $table->timestamps(); 18 | }); 19 | } 20 | 21 | /** 22 | * Reverse the migrations. 23 | */ 24 | public function down(): void 25 | { 26 | Schema::dropIfExists('oauth_personal_access_clients'); 27 | } 28 | }; 29 | -------------------------------------------------------------------------------- /laravel-json-api/database/migrations/2019_08_19_000000_create_failed_jobs_table.php: -------------------------------------------------------------------------------- 1 | id(); 18 | $table->string('uuid')->unique(); 19 | $table->text('connection'); 20 | $table->text('queue'); 21 | $table->longText('payload'); 22 | $table->longText('exception'); 23 | $table->timestamp('failed_at')->useCurrent(); 24 | }); 25 | } 26 | 27 | /** 28 | * Reverse the migrations. 29 | * 30 | * @return void 31 | */ 32 | public function down() 33 | { 34 | Schema::dropIfExists('failed_jobs'); 35 | } 36 | }; 37 | -------------------------------------------------------------------------------- /laravel-json-api/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php: -------------------------------------------------------------------------------- 1 | id(); 18 | $table->morphs('tokenable'); 19 | $table->string('name'); 20 | $table->string('token', 64)->unique(); 21 | $table->text('abilities')->nullable(); 22 | $table->timestamp('last_used_at')->nullable(); 23 | $table->timestamp('expires_at')->nullable(); 24 | $table->timestamps(); 25 | }); 26 | } 27 | 28 | /** 29 | * Reverse the migrations. 30 | * 31 | * @return void 32 | */ 33 | public function down() 34 | { 35 | Schema::dropIfExists('personal_access_tokens'); 36 | } 37 | }; 38 | -------------------------------------------------------------------------------- /laravel-json-api/database/seeders/DatabaseSeeder.php: -------------------------------------------------------------------------------- 1 | call(UsersSeeder::class); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /laravel-json-api/database/seeders/UsersSeeder.php: -------------------------------------------------------------------------------- 1 | truncate(); 22 | Schema::enableForeignKeyConstraints(); 23 | 24 | User::create([ 25 | 'name' => 'Admin', 26 | 'email' => 'admin@jsonapi.com', 27 | 'password' => 'secret' 28 | ]); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /laravel-json-api/lang/en/auth.php: -------------------------------------------------------------------------------- 1 | 'These credentials do not match our records.', 17 | 'password' => 'The provided password is incorrect.', 18 | 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', 19 | 20 | ]; 21 | -------------------------------------------------------------------------------- /laravel-json-api/lang/en/pagination.php: -------------------------------------------------------------------------------- 1 | '« Previous', 17 | 'next' => 'Next »', 18 | 19 | ]; 20 | -------------------------------------------------------------------------------- /laravel-json-api/lang/en/passwords.php: -------------------------------------------------------------------------------- 1 | 'Your password has been reset!', 17 | 'sent' => 'We have emailed your password reset link!', 18 | 'throttled' => 'Please wait before retrying.', 19 | 'token' => 'This password reset token is invalid.', 20 | 'user' => "We can't find a user with that email address.", 21 | 22 | ]; 23 | -------------------------------------------------------------------------------- /laravel-json-api/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "scripts": { 4 | "dev": "vite", 5 | "build": "vite build" 6 | }, 7 | "devDependencies": { 8 | "axios": "^1.1.2", 9 | "laravel-vite-plugin": "^0.6.0", 10 | "lodash": "^4.17.19", 11 | "postcss": "^8.1.14", 12 | "vite": "^3.0.0" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /laravel-json-api/phpunit.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | ./tests/Unit 10 | 11 | 12 | ./tests/Feature 13 | 14 | 15 | 16 | 17 | ./app 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /laravel-json-api/public/.htaccess: -------------------------------------------------------------------------------- 1 | 2 | 3 | Options -MultiViews -Indexes 4 | 5 | 6 | RewriteEngine On 7 | 8 | # Handle Authorization Header 9 | RewriteCond %{HTTP:Authorization} . 10 | RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 11 | 12 | # Redirect Trailing Slashes If Not A Folder... 13 | RewriteCond %{REQUEST_FILENAME} !-d 14 | RewriteCond %{REQUEST_URI} (.+)/$ 15 | RewriteRule ^ %1 [L,R=301] 16 | 17 | # Send Requests To Front Controller... 18 | RewriteCond %{REQUEST_FILENAME} !-d 19 | RewriteCond %{REQUEST_FILENAME} !-f 20 | RewriteRule ^ index.php [L] 21 | 22 | -------------------------------------------------------------------------------- /laravel-json-api/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/laravel-json-api/public/favicon.ico -------------------------------------------------------------------------------- /laravel-json-api/public/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: 3 | -------------------------------------------------------------------------------- /laravel-json-api/resources/css/app.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/laravel-json-api/resources/css/app.css -------------------------------------------------------------------------------- /laravel-json-api/resources/js/app.js: -------------------------------------------------------------------------------- 1 | import './bootstrap'; 2 | -------------------------------------------------------------------------------- /laravel-json-api/resources/js/bootstrap.js: -------------------------------------------------------------------------------- 1 | import _ from 'lodash'; 2 | window._ = _; 3 | 4 | /** 5 | * We'll load the axios HTTP library which allows us to easily issue requests 6 | * to our Laravel back-end. This library automatically handles sending the 7 | * CSRF token as a header based on the value of the "XSRF" token cookie. 8 | */ 9 | 10 | import axios from 'axios'; 11 | window.axios = axios; 12 | 13 | window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; 14 | 15 | /** 16 | * Echo exposes an expressive API for subscribing to channels and listening 17 | * for events that are broadcast by Laravel. Echo and event broadcasting 18 | * allows your team to easily build robust real-time web applications. 19 | */ 20 | 21 | // import Echo from 'laravel-echo'; 22 | 23 | // import Pusher from 'pusher-js'; 24 | // window.Pusher = Pusher; 25 | 26 | // window.Echo = new Echo({ 27 | // broadcaster: 'pusher', 28 | // key: import.meta.env.VITE_PUSHER_APP_KEY, 29 | // wsHost: import.meta.env.VITE_PUSHER_HOST ? import.meta.env.VITE_PUSHER_HOST : `ws-${import.meta.env.VITE_PUSHER_APP_CLUSTER}.pusher.com`, 30 | // wsPort: import.meta.env.VITE_PUSHER_PORT ?? 80, 31 | // wssPort: import.meta.env.VITE_PUSHER_PORT ?? 443, 32 | // forceTLS: (import.meta.env.VITE_PUSHER_SCHEME ?? 'https') === 'https', 33 | // enabledTransports: ['ws', 'wss'], 34 | // }); 35 | -------------------------------------------------------------------------------- /laravel-json-api/routes/api.php: -------------------------------------------------------------------------------- 1 | middleware('json.api')->group(function () { 27 | Route::post('/login', LoginController::class)->name('login'); 28 | Route::post('/logout', LogoutController::class)->middleware('auth:api'); 29 | Route::post('/register', RegisterController::class); 30 | Route::post('/password-forgot', ForgotPasswordController::class); 31 | Route::post('/password-reset', ResetPasswordController::class)->name('password.reset'); 32 | }); 33 | 34 | JsonApiRoute::server('v2')->prefix('v2')->resources(function (ResourceRegistrar $server) { 35 | $server->resource('users', JsonApiController::class); 36 | Route::get('me', [MeController::class, 'readProfile']); 37 | Route::patch('me', [MeController::class, 'updateProfile']); 38 | }); -------------------------------------------------------------------------------- /laravel-json-api/routes/channels.php: -------------------------------------------------------------------------------- 1 | id === (int) $id; 18 | }); 19 | -------------------------------------------------------------------------------- /laravel-json-api/routes/console.php: -------------------------------------------------------------------------------- 1 | comment(Inspiring::quote()); 19 | })->purpose('Display an inspiring quote'); 20 | -------------------------------------------------------------------------------- /laravel-json-api/routes/web.php: -------------------------------------------------------------------------------- 1 | make(Kernel::class)->bootstrap(); 19 | 20 | return $app; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /laravel-json-api/tests/Feature/ExampleTest.php: -------------------------------------------------------------------------------- 1 | get('/'); 18 | 19 | $response->assertStatus(200); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /laravel-json-api/tests/TestCase.php: -------------------------------------------------------------------------------- 1 | assertTrue(true); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /laravel-json-api/vite.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite'; 2 | import laravel from 'laravel-vite-plugin'; 3 | 4 | export default defineConfig({ 5 | plugins: [ 6 | laravel({ 7 | input: ['resources/css/app.css', 'resources/js/app.js'], 8 | refresh: true, 9 | }), 10 | ], 11 | }); 12 | -------------------------------------------------------------------------------- /vue-paper-dashboard/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | [ 4 | "@vue/app", 5 | { 6 | "polyfills": ["es7.object.entries", "es6.promise"] 7 | } 8 | ] 9 | ], 10 | "plugins": [ 11 | [ 12 | "component", 13 | { 14 | "libraryName": "element-ui", 15 | "styleLibraryName": "theme-chalk" 16 | } 17 | ] 18 | ], 19 | "comments": false 20 | } 21 | -------------------------------------------------------------------------------- /vue-paper-dashboard/.env.example: -------------------------------------------------------------------------------- 1 | VUE_APP_BASE_URL= 2 | VUE_APP_API_BASE_URL= 3 | VUE_APP_API_KEY= 4 | VUE_APP_IS_DEMO= -------------------------------------------------------------------------------- /vue-paper-dashboard/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "extends": [ 4 | "plugin:vue/essential", 5 | "@vue/prettier" 6 | ] 7 | } -------------------------------------------------------------------------------- /vue-paper-dashboard/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "browser": true, 4 | "commonjs": true, 5 | "es6": true, 6 | "node": true 7 | }, 8 | "parser": "babel-eslint", 9 | "parserOptions": { 10 | "ecmaFeatures": { 11 | "jsx": true 12 | }, 13 | "allowImportExportEverywhere": true, 14 | "sourceType": "module" 15 | }, 16 | "rules": { 17 | "no-multiple-empty-lines": [2, { "max": 2, "maxEOF": 1 }], 18 | "no-mixed-operators": 0, 19 | "no-debugger": 0, 20 | "no-const-assign": "warn", 21 | "no-this-before-super": "warn", 22 | "no-undef": "warn", 23 | "no-unreachable": "warn", 24 | "no-unused-vars": "warn", 25 | "constructor-super": "warn", 26 | "valid-typeof": "warn" 27 | }, 28 | // https://github.com/feross/standard/blob/master/RULES.md#javascript-standard-style 29 | "extends": "standard", 30 | // required to lint *.vue files 31 | "plugins": [ 32 | "html" 33 | ] 34 | } 35 | // http://eslint.org/docs/user-guide/configuring 36 | -------------------------------------------------------------------------------- /vue-paper-dashboard/.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | *.scss linguist-language=Vue 3 | *.css linguist-language=Vue 4 | 5 | # Standard to msysgit 6 | *.doc diff=astextplain 7 | *.DOC diff=astextplain 8 | *.docx diff=astextplain 9 | *.DOCX diff=astextplain 10 | *.dot diff=astextplain 11 | *.DOT diff=astextplain 12 | *.pdf diff=astextplain 13 | *.PDF diff=astextplain 14 | *.rtf diff=astextplain 15 | *.RTF diff=astextplain 16 | -------------------------------------------------------------------------------- /vue-paper-dashboard/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | dist/ 4 | .idea/ 5 | npm-debug.log 6 | 7 | storybook-static/ 8 | test/unit/coverage/ 9 | 10 | .env -------------------------------------------------------------------------------- /vue-paper-dashboard/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | All notable changes to `Vue Paper Dashboard Laravel` will be documented in this file. 4 | 5 | ## Version 1.0.0 6 | 7 | ### Added 8 | - Vue Paper Dashboard Free 9 | - Login 10 | - Register 11 | - Profile edit 12 | 13 | ## Version 1.0.1 14 | Update to Laravel 9.x 15 | -------------------------------------------------------------------------------- /vue-paper-dashboard/docs/.vuepress/components/component-status.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 33 | 34 | 56 | -------------------------------------------------------------------------------- /vue-paper-dashboard/docs/.vuepress/components/components-table.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 14 | 15 | 25 | -------------------------------------------------------------------------------- /vue-paper-dashboard/docs/.vuepress/demo.css: -------------------------------------------------------------------------------- 1 | .sidebar { 2 | font-size: 15px; 3 | background-color: #fff; 4 | width: 20rem; 5 | position: fixed; 6 | z-index: 10; 7 | margin: 0; 8 | top: 3.6rem; 9 | left: 0; 10 | bottom: 0; 11 | box-sizing: border-box; 12 | border-right: 1px solid #eaecef; 13 | overflow-y: auto; 14 | } 15 | 16 | .navbar a:not(.btn):not(.dropdown-item) { 17 | color: #ff4f00; 18 | } -------------------------------------------------------------------------------- /vue-paper-dashboard/docs/.vuepress/doc_styles.scss: -------------------------------------------------------------------------------- 1 | $box-shadow: 0 10px 20px -8px rgba(0,0,0,.15); 2 | $border-color: rgba(0,0,0,.05); 3 | table { 4 | width: 100%; 5 | box-shadow: $box-shadow; 6 | display: table; 7 | margin: 0; 8 | } 9 | th { 10 | padding: 10px; 11 | border: 1px solid rgba(0,0,0,.05); 12 | background: #fafafa; 13 | } 14 | tr { 15 | border-top: 1px solid #dfe2e5; 16 | } 17 | td { 18 | border: 1px solid rgba(0,0,0,.05) 19 | } 20 | 21 | .el-picker-panel__content { 22 | width: 100%; 23 | } 24 | .el-date-table { 25 | box-shadow: none; 26 | width: 100%; 27 | td, tr, th { 28 | border: none; 29 | background-color: transparent; 30 | } 31 | } 32 | 33 | .demo-block { 34 | margin-top: 30px; 35 | box-shadow: $box-shadow; 36 | border: 1px solid $border-color; 37 | } 38 | 39 | 40 | .navbar .search-box .suggestion a { 41 | color: inherit; 42 | } 43 | 44 | .theme-container .navbar { 45 | z-index: 1000; 46 | } 47 | -------------------------------------------------------------------------------- /vue-paper-dashboard/docs/.vuepress/markdownParser.js: -------------------------------------------------------------------------------- 1 | function convert(str) { 2 | str = str.replace(/(&#x)(\w{4});/gi, function($0) { 3 | return String.fromCharCode(parseInt(encodeURIComponent($0).replace(/(%26%23x)(\w{4})(%3B)/g, '$2'), 16)); 4 | }); 5 | return str; 6 | } 7 | const striptags = require('./strip-tags'); 8 | const markdownitContainer = require('markdown-it-container'); 9 | 10 | module.exports = md => { 11 | // use more markdown-it plugins! 12 | md.use(markdownitContainer, 'demo', { 13 | validate: function(params) { 14 | return params.trim().match(/^demo\s*(.*)$/); 15 | }, 16 | 17 | render: function(tokens, idx) { 18 | const m = tokens[idx].info.trim().match(/^demo\s*(.*)$/); 19 | if (tokens[idx].nesting === 1) { 20 | const description = (m && m.length > 1) ? m[1] : ''; 21 | const content = tokens[idx + 1].content; 22 | const html = convert(striptags.strip(content, ['script', 'style'])).replace(/(<[^>]*)=""(?=.*>)/g, '$1'); 23 | const script = striptags.fetch(content, 'script'); 24 | const style = striptags.fetch(content, 'style'); 25 | let jsfiddle = { html: html, script: script, style: style }; 26 | const descriptionHTML = description 27 | ? md.render(description) 28 | : ''; 29 | 30 | jsfiddle = md.utils.escapeHtml(JSON.stringify(jsfiddle)); 31 | return ` 32 |
${html}
33 | ${descriptionHTML} 34 |
`; 35 | } 36 | return '
\n'; 37 | } 38 | }) 39 | } 40 | -------------------------------------------------------------------------------- /vue-paper-dashboard/docs/.vuepress/override.styl: -------------------------------------------------------------------------------- 1 | $accentColor = #ff4f00 2 | $textColor = #0d1944 3 | $borderColor = #eaecef 4 | $codeBgColor = #282c34 5 | -------------------------------------------------------------------------------- /vue-paper-dashboard/docs/.vuepress/public/static/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/docs/.vuepress/public/static/.gitkeep -------------------------------------------------------------------------------- /vue-paper-dashboard/docs/.vuepress/public/static/img/apple-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/docs/.vuepress/public/static/img/apple-icon.png -------------------------------------------------------------------------------- /vue-paper-dashboard/docs/.vuepress/public/static/img/background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/docs/.vuepress/public/static/img/background.jpg -------------------------------------------------------------------------------- /vue-paper-dashboard/docs/.vuepress/public/static/img/default-avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/docs/.vuepress/public/static/img/default-avatar.png -------------------------------------------------------------------------------- /vue-paper-dashboard/docs/.vuepress/public/static/img/faces/ayo-ogunseinde-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/docs/.vuepress/public/static/img/faces/ayo-ogunseinde-2.jpg -------------------------------------------------------------------------------- /vue-paper-dashboard/docs/.vuepress/public/static/img/faces/erik-lucatero-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/docs/.vuepress/public/static/img/faces/erik-lucatero-2.jpg -------------------------------------------------------------------------------- /vue-paper-dashboard/docs/.vuepress/public/static/img/faces/face-0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/docs/.vuepress/public/static/img/faces/face-0.jpg -------------------------------------------------------------------------------- /vue-paper-dashboard/docs/.vuepress/public/static/img/faces/face-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/docs/.vuepress/public/static/img/faces/face-1.jpg -------------------------------------------------------------------------------- /vue-paper-dashboard/docs/.vuepress/public/static/img/faces/face-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/docs/.vuepress/public/static/img/faces/face-2.jpg -------------------------------------------------------------------------------- /vue-paper-dashboard/docs/.vuepress/public/static/img/faces/face-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/docs/.vuepress/public/static/img/faces/face-3.jpg -------------------------------------------------------------------------------- /vue-paper-dashboard/docs/.vuepress/public/static/img/faces/joe-gardner-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/docs/.vuepress/public/static/img/faces/joe-gardner-1.jpg -------------------------------------------------------------------------------- /vue-paper-dashboard/docs/.vuepress/public/static/img/faces/joe-gardner-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/docs/.vuepress/public/static/img/faces/joe-gardner-2.jpg -------------------------------------------------------------------------------- /vue-paper-dashboard/docs/.vuepress/public/static/img/faces/kaci-baum-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/docs/.vuepress/public/static/img/faces/kaci-baum-2.jpg -------------------------------------------------------------------------------- /vue-paper-dashboard/docs/.vuepress/public/static/img/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/docs/.vuepress/public/static/img/favicon.png -------------------------------------------------------------------------------- /vue-paper-dashboard/docs/.vuepress/public/static/img/mask.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/docs/.vuepress/public/static/img/mask.png -------------------------------------------------------------------------------- /vue-paper-dashboard/docs/.vuepress/public/static/img/mike.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/docs/.vuepress/public/static/img/mike.jpg -------------------------------------------------------------------------------- /vue-paper-dashboard/docs/.vuepress/public/static/img/new_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/docs/.vuepress/public/static/img/new_logo.png -------------------------------------------------------------------------------- /vue-paper-dashboard/docs/.vuepress/public/static/img/tables/agenda.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/docs/.vuepress/public/static/img/tables/agenda.png -------------------------------------------------------------------------------- /vue-paper-dashboard/docs/.vuepress/public/static/img/tables/evernote.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/docs/.vuepress/public/static/img/tables/evernote.png -------------------------------------------------------------------------------- /vue-paper-dashboard/docs/.vuepress/public/static/img/tables/stylus.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/docs/.vuepress/public/static/img/tables/stylus.jpg -------------------------------------------------------------------------------- /vue-paper-dashboard/docs/.vuepress/public/static/img/tim_80x80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/docs/.vuepress/public/static/img/tim_80x80.png -------------------------------------------------------------------------------- /vue-paper-dashboard/docs/.vuepress/public/static/img/vue-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/docs/.vuepress/public/static/img/vue-logo.png -------------------------------------------------------------------------------- /vue-paper-dashboard/docs/.vuepress/strip-tags.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * strip-tags 3 | * 4 | * Copyright (c) 2015 Jon Schlinkert, contributors. 5 | * Licensed under the MIT license. 6 | */ 7 | 8 | 'use strict'; 9 | 10 | const cheerio = require('cheerio'); 11 | 12 | exports.strip = function(str, tags) { 13 | const $ = cheerio.load(str, {decodeEntities: false, xmlMode: true}); 14 | 15 | if (!tags || tags.length === 0) { 16 | return str; 17 | } 18 | 19 | tags = !Array.isArray(tags) ? [tags] : tags; 20 | let len = tags.length; 21 | 22 | while (len--) { 23 | $(tags[len]).remove(); 24 | } 25 | 26 | return $.html(); 27 | }; 28 | 29 | exports.fetch = function(str, tag) { 30 | const $ = cheerio.load(str, {decodeEntities: false}); 31 | if (!tag) return str; 32 | 33 | return $(tag).html(); 34 | }; 35 | -------------------------------------------------------------------------------- /vue-paper-dashboard/docs/.vuepress/utils/get-sidebar-elements.js: -------------------------------------------------------------------------------- 1 | let componentList = [ 2 | 'button', 3 | 'cards', 4 | 'dropdown', 5 | 'inputs', 6 | 'modal', 7 | 'navbars', 8 | 'notifications', 9 | 'progress', 10 | 'radio', 11 | 'select', 12 | 'tables', 13 | ]; 14 | export default function (componentEntries) { 15 | let sideItems = []; 16 | const menus = { 17 | components: { 18 | title: 'Components', 19 | collapsable: false, 20 | children: [] 21 | } 22 | }; 23 | 24 | componentList.forEach(component => { 25 | menus.components.children.push(`/component-docs/${component}`) 26 | }); 27 | 28 | for (let menu in menus) { 29 | if (menus[menu].children.length > 0) { 30 | sideItems.push(menus[menu]); 31 | } 32 | } 33 | 34 | return sideItems; 35 | } 36 | -------------------------------------------------------------------------------- /vue-paper-dashboard/docs/component-docs/sliders.md: -------------------------------------------------------------------------------- 1 | # Sliders 2 | 3 |
4 | We used element-ui Sliders and restyled them 5 | To use it, import it from element-ui 6 | 7 | ```js 8 | import {Slider} from 'element-ui' 9 | ``` 10 | 11 | Global usage 12 | 13 | ```js 14 | Vue.use(Slider.name, Slider) 15 | ``` 16 | 17 | For local usage 18 | 19 | ```js 20 | export default { 21 | components: { 22 | [Slider.name]: Slider 23 | } 24 | } 25 | ``` 26 | 27 | ### Simple slider with v-model 28 | :::tip 29 | You can add one of select-`default|primary|info|danger|warning` classes to customize the color 30 | of the slider. 31 | ::: 32 | 33 | :::demo 34 | ```html 35 | 40 | 49 | ``` 50 | ::: 51 | 52 | ### Range slider 53 | 54 | :::demo 55 | ```html 56 | 63 | 64 | 73 | ``` 74 | ::: 75 | 76 | 77 | 87 | -------------------------------------------------------------------------------- /vue-paper-dashboard/docs/examples/download.md: -------------------------------------------------------------------------------- 1 | # Download 2 | 3 | For the PRO version of the project you will download the .zip file from the Creative Tim site and extract it. 4 | 5 | You will get two project folders: one for the Laravel API project and one for the Vue frontend. -------------------------------------------------------------------------------- /vue-paper-dashboard/docs/licence.md: -------------------------------------------------------------------------------- 1 | ## Licence 2 | 3 | When you purchase an item from Creative Tim, 4 | you are actually purchasing a license to use that item. 5 | All our free items are under MIT license. 6 | All our premium items are covered by our Personal and Developer licenses. 7 | In order to understand the rights and restrictions that come with your purchase, please read the details from our Official License Page. -------------------------------------------------------------------------------- /vue-paper-dashboard/docs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tagup", 3 | "version": "1.0.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "vuepress dev", 7 | "deploy": "npm run build && gh-pages -d .vuepress/dist", 8 | "build": "vuepress build", 9 | "copy:docs": "ncp .vuepress/dist ../dist/documentation", 10 | "build:docs": "vuepress build && npm run copy:docs" 11 | }, 12 | "devDependencies": { 13 | "cheerio": "^1.0.0-rc.2", 14 | "gh-pages": "^1.1.0", 15 | "markdown-it-container": "^2.0.0", 16 | "ncp": "^2.0.0", 17 | "rgb-hex": "^2.1.0", 18 | "sass-vars-to-js-loader": "^2.0.2", 19 | "vue-docgen-api": "^2.3.11", 20 | "vuepress": "^0.10.0" 21 | }, 22 | "author": "tagup@tagup.io", 23 | "description": "Tagup component docs", 24 | "dependencies": { 25 | "element-ui": "^2.4.0" 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /vue-paper-dashboard/public/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/public/favicon.png -------------------------------------------------------------------------------- /vue-paper-dashboard/public/img/icons/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/public/img/icons/android-chrome-192x192.png -------------------------------------------------------------------------------- /vue-paper-dashboard/public/img/icons/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/public/img/icons/android-chrome-512x512.png -------------------------------------------------------------------------------- /vue-paper-dashboard/public/img/icons/apple-touch-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/public/img/icons/apple-touch-icon-120x120.png -------------------------------------------------------------------------------- /vue-paper-dashboard/public/img/icons/apple-touch-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/public/img/icons/apple-touch-icon-152x152.png -------------------------------------------------------------------------------- /vue-paper-dashboard/public/img/icons/apple-touch-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/public/img/icons/apple-touch-icon-180x180.png -------------------------------------------------------------------------------- /vue-paper-dashboard/public/img/icons/apple-touch-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/public/img/icons/apple-touch-icon-60x60.png -------------------------------------------------------------------------------- /vue-paper-dashboard/public/img/icons/apple-touch-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/public/img/icons/apple-touch-icon-76x76.png -------------------------------------------------------------------------------- /vue-paper-dashboard/public/img/icons/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/public/img/icons/apple-touch-icon.png -------------------------------------------------------------------------------- /vue-paper-dashboard/public/img/icons/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/public/img/icons/favicon-16x16.png -------------------------------------------------------------------------------- /vue-paper-dashboard/public/img/icons/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/public/img/icons/favicon-32x32.png -------------------------------------------------------------------------------- /vue-paper-dashboard/public/img/icons/msapplication-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/public/img/icons/msapplication-icon-144x144.png -------------------------------------------------------------------------------- /vue-paper-dashboard/public/img/icons/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/public/img/icons/mstile-150x150.png -------------------------------------------------------------------------------- /vue-paper-dashboard/public/img/placeholder.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/public/img/placeholder.jpg -------------------------------------------------------------------------------- /vue-paper-dashboard/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue-paper-dashboard-pro", 3 | "short_name": "vue-paper-dashboard-pro", 4 | "icons": [ 5 | { 6 | "src": "./img/icons/android-chrome-192x192.png", 7 | "sizes": "192x192", 8 | "type": "image/png" 9 | }, 10 | { 11 | "src": "./img/icons/android-chrome-512x512.png", 12 | "sizes": "512x512", 13 | "type": "image/png" 14 | } 15 | ], 16 | "start_url": "./index.html", 17 | "display": "standalone", 18 | "background_color": "#000000", 19 | "theme_color": "#4DBA87" 20 | } 21 | -------------------------------------------------------------------------------- /vue-paper-dashboard/public/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: 3 | -------------------------------------------------------------------------------- /vue-paper-dashboard/public/static/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/public/static/.gitkeep -------------------------------------------------------------------------------- /vue-paper-dashboard/public/static/img/apple-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/public/static/img/apple-icon.png -------------------------------------------------------------------------------- /vue-paper-dashboard/public/static/img/background-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/public/static/img/background-2.jpg -------------------------------------------------------------------------------- /vue-paper-dashboard/public/static/img/background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/public/static/img/background.jpg -------------------------------------------------------------------------------- /vue-paper-dashboard/public/static/img/background/background-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/public/static/img/background/background-2.jpg -------------------------------------------------------------------------------- /vue-paper-dashboard/public/static/img/background/bruno-abatti.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/public/static/img/background/bruno-abatti.jpg -------------------------------------------------------------------------------- /vue-paper-dashboard/public/static/img/background/damir-bosnjak.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/public/static/img/background/damir-bosnjak.jpg -------------------------------------------------------------------------------- /vue-paper-dashboard/public/static/img/background/daniel-olahs.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/public/static/img/background/daniel-olahs.jpg -------------------------------------------------------------------------------- /vue-paper-dashboard/public/static/img/background/david-marcu.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/public/static/img/background/david-marcu.jpg -------------------------------------------------------------------------------- /vue-paper-dashboard/public/static/img/background/jan-sendereks.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/public/static/img/background/jan-sendereks.jpg -------------------------------------------------------------------------------- /vue-paper-dashboard/public/static/img/default-avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/public/static/img/default-avatar.png -------------------------------------------------------------------------------- /vue-paper-dashboard/public/static/img/faces/ayo-ogunseinde-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/public/static/img/faces/ayo-ogunseinde-2.jpg -------------------------------------------------------------------------------- /vue-paper-dashboard/public/static/img/faces/erik-lucatero-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/public/static/img/faces/erik-lucatero-2.jpg -------------------------------------------------------------------------------- /vue-paper-dashboard/public/static/img/faces/face-0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/public/static/img/faces/face-0.jpg -------------------------------------------------------------------------------- /vue-paper-dashboard/public/static/img/faces/face-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/public/static/img/faces/face-1.jpg -------------------------------------------------------------------------------- /vue-paper-dashboard/public/static/img/faces/face-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/public/static/img/faces/face-2.jpg -------------------------------------------------------------------------------- /vue-paper-dashboard/public/static/img/faces/face-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/public/static/img/faces/face-3.jpg -------------------------------------------------------------------------------- /vue-paper-dashboard/public/static/img/faces/joe-gardner-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/public/static/img/faces/joe-gardner-1.jpg -------------------------------------------------------------------------------- /vue-paper-dashboard/public/static/img/faces/joe-gardner-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/public/static/img/faces/joe-gardner-2.jpg -------------------------------------------------------------------------------- /vue-paper-dashboard/public/static/img/faces/kaci-baum-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/public/static/img/faces/kaci-baum-2.jpg -------------------------------------------------------------------------------- /vue-paper-dashboard/public/static/img/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/public/static/img/favicon.png -------------------------------------------------------------------------------- /vue-paper-dashboard/public/static/img/jan-sendereks.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/public/static/img/jan-sendereks.jpg -------------------------------------------------------------------------------- /vue-paper-dashboard/public/static/img/mike.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/public/static/img/mike.jpg -------------------------------------------------------------------------------- /vue-paper-dashboard/public/static/img/placeholder.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/public/static/img/placeholder.jpg -------------------------------------------------------------------------------- /vue-paper-dashboard/public/static/img/tables/agenda.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/public/static/img/tables/agenda.png -------------------------------------------------------------------------------- /vue-paper-dashboard/public/static/img/tables/evernote.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/public/static/img/tables/evernote.png -------------------------------------------------------------------------------- /vue-paper-dashboard/public/static/img/tables/stylus.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/public/static/img/tables/stylus.jpg -------------------------------------------------------------------------------- /vue-paper-dashboard/public/static/img/vue-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/public/static/img/vue-logo.png -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/css/custom.css: -------------------------------------------------------------------------------- 1 | .login-page .full-page > .content { 2 | padding-top: 8vh; 3 | } 4 | 5 | .animation-transition-general { 6 | -webkit-transition: all 300ms linear; 7 | -moz-transition: all 300ms linear; 8 | -o-transition: all 300ms linear; 9 | -ms-transition: all 300ms linear; 10 | transition: all 300ms linear; 11 | } 12 | 13 | .avatar-image { 14 | background-position: center; 15 | background-repeat: no-repeat; 16 | background-size: cover; 17 | } 18 | 19 | .btn-inner--icon i:not(.fa) { 20 | position: relative; 21 | top: 2px; 22 | } 23 | 24 | .sidebar .nav .btn-neutral p, .sidebar .nav .btn-neutral i{ 25 | color: black; 26 | } 27 | 28 | .vue-notifyjs .alert .alert-icon { 29 | font-size: 20px !important; 30 | margin-right: 5px; 31 | margin-bottom: 3px; 32 | } 33 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/fonts/glyphicons-halflings-regular.448c34a.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/src/assets/fonts/glyphicons-halflings-regular.448c34a.woff2 -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/fonts/glyphicons-halflings-regular.e18bbf6.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/src/assets/fonts/glyphicons-halflings-regular.e18bbf6.ttf -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/fonts/glyphicons-halflings-regular.f4769f9.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/src/assets/fonts/glyphicons-halflings-regular.f4769f9.eot -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/fonts/glyphicons-halflings-regular.fa27723.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/src/assets/fonts/glyphicons-halflings-regular.fa27723.woff -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/fonts/nucleo-icons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/src/assets/fonts/nucleo-icons.eot -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/fonts/nucleo-icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/src/assets/fonts/nucleo-icons.ttf -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/fonts/nucleo-icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/src/assets/fonts/nucleo-icons.woff -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/fonts/nucleo-icons.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/src/assets/fonts/nucleo-icons.woff2 -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/fonts/themify.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/src/assets/fonts/themify.eot -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/fonts/themify.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/src/assets/fonts/themify.ttf -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/fonts/themify.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/src/assets/fonts/themify.woff -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/img/apple-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/src/assets/img/apple-icon.png -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/img/background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/src/assets/img/background.jpg -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/img/faces/face-0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/src/assets/img/faces/face-0.jpg -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/img/faces/face-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/src/assets/img/faces/face-1.jpg -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/img/faces/face-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/src/assets/img/faces/face-2.jpg -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/img/faces/face-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/src/assets/img/faces/face-3.jpg -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/img/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/src/assets/img/favicon.png -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/img/new_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/src/assets/img/new_logo.png -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/img/tim_80x80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/src/assets/img/tim_80x80.png -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/img/vue-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/src/assets/img/vue-logo.png -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/sass/paper/_alerts.scss: -------------------------------------------------------------------------------- 1 | .alert{ 2 | border: 0; 3 | border-radius: $border-radius-small; 4 | color: $white-color; 5 | padding-top: .9rem; 6 | padding-bottom: .9rem; 7 | position: relative; 8 | 9 | &.alert-success{ 10 | background-color: lighten($success-color, 5%); 11 | } 12 | 13 | &.alert-danger{ 14 | background-color: lighten($danger-color, 5%); 15 | } 16 | 17 | &.alert-warning{ 18 | background-color: lighten($warning-color, 5%); 19 | } 20 | 21 | &.alert-info{ 22 | background-color: lighten($info-color, 5%); 23 | } 24 | 25 | &.alert-primary{ 26 | background-color: lighten($primary-color, 5%); 27 | } 28 | 29 | .close{ 30 | color: $white-color; 31 | opacity: .9; 32 | text-shadow: none; 33 | line-height: 0; 34 | outline: 0; 35 | 36 | i.fa, 37 | i.nc-icon{ 38 | font-size: 14px !important; 39 | } 40 | 41 | &:hover, 42 | &:focus { 43 | opacity: 1; 44 | } 45 | } 46 | 47 | span[data-notify="icon"]{ 48 | font-size: 27px; 49 | display: block; 50 | left: 19px; 51 | position: absolute; 52 | top: 50%; 53 | margin-top: -11px; 54 | } 55 | 56 | button.close{ 57 | position: absolute; 58 | right: 10px; 59 | top: 50%; 60 | margin-top: -13px; 61 | width: 25px; 62 | height: 25px; 63 | padding: 3px; 64 | } 65 | 66 | .close ~ span{ 67 | display: block; 68 | max-width: 89%; 69 | } 70 | 71 | &.alert-with-icon{ 72 | padding-left: 65px; 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/sass/paper/_card-signup.scss: -------------------------------------------------------------------------------- 1 | .card-signup{ 2 | .header{ 3 | margin-left: 20px; 4 | margin-right: 20px; 5 | padding: 30px 0; 6 | } 7 | .text-divider{ 8 | margin-top: 30px; 9 | margin-bottom: 0px; 10 | text-align: center; 11 | } 12 | .content{ 13 | padding: 0px 30px; 14 | } 15 | 16 | .form-check{ 17 | margin-top: 20px; 18 | 19 | label{ 20 | margin-left: 7px; 21 | padding-left: 38px; 22 | } 23 | } 24 | 25 | .social-line{ 26 | margin-top: 20px; 27 | text-align: center; 28 | 29 | .btn.btn-icon , 30 | .btn.btn-icon .btn-icon{ 31 | margin-left: 5px; 32 | margin-right: 5px; 33 | box-shadow: 0px 5px 50px 0px rgba(0, 0, 0, 0.2); 34 | } 35 | } 36 | 37 | .card-footer{ 38 | margin-bottom: 10px; 39 | margin-top: 24px; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/sass/paper/_footers.scss: -------------------------------------------------------------------------------- 1 | .footer{ 2 | padding: 24px 0; 3 | 4 | &.footer-default{ 5 | background-color: #f2f2f2; 6 | } 7 | 8 | nav{ 9 | display: inline-block; 10 | float: left; 11 | padding-left: 0; 12 | } 13 | 14 | ul{ 15 | margin-bottom: 0; 16 | padding: 0; 17 | list-style: none; 18 | 19 | li{ 20 | display: inline-block; 21 | 22 | a{ 23 | color: inherit; 24 | padding: $padding-base-vertical; 25 | font-size: $font-size-small; 26 | text-transform: uppercase; 27 | text-decoration: none; 28 | 29 | &:hover{ 30 | text-decoration: none; 31 | } 32 | } 33 | } 34 | } 35 | 36 | .copyright{ 37 | font-size: $font-size-small; 38 | line-height: 1.8; 39 | } 40 | 41 | &:after{ 42 | display: table; 43 | clear: both; 44 | content: " "; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/sass/paper/_images.scss: -------------------------------------------------------------------------------- 1 | img{ 2 | max-width: 100%; 3 | border-radius: $border-radius-small; 4 | } 5 | .img-raised{ 6 | box-shadow: $box-shadow-raised; 7 | } 8 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/sass/paper/_media-queries.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/vue-paper-dashboard-laravel/c0d056d92e55e30f4cf236355eb065e5f7c6b78e/vue-paper-dashboard/src/assets/sass/paper/_media-queries.scss -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/sass/paper/_misc-extend.scss: -------------------------------------------------------------------------------- 1 | 2 | 3 | .ct-label.ct-horizontal.ct-end, 4 | .ct-label.ct-vertical.ct-start { 5 | font-size: 14px; 6 | } 7 | 8 | .ct-chart.ct-perfect-fourth { 9 | .ct-chart-pie .ct-label { 10 | font-size: 14px; 11 | } 12 | } 13 | 14 | .card { 15 | .card-footer .footer-line { 16 | padding-top: 3px; 17 | } 18 | 19 | &.bootstrap-table { 20 | .dropdown-item.active { 21 | background-color: $default-color; 22 | color: $white-color; 23 | } 24 | } 25 | 26 | .team-members { 27 | .avatar { 28 | margin-top: 5px; 29 | } 30 | .text-right .btn{ 31 | margin-top: 5px; 32 | } 33 | } 34 | } 35 | 36 | .btn-group-sm { 37 | .btn-round { 38 | border-radius: 30px; 39 | } 40 | } 41 | 42 | // Pulsing Heart (footer) 43 | .heart { 44 | color: #EB5E28; 45 | animation: hearthing 1s ease infinite,; 46 | } 47 | 48 | @keyframes hearthing { 49 | 0% { transform: scale( .75 ); } 50 | 20% { transform: scale( 1 ); } 51 | 40% { transform: scale( .75 ); } 52 | 60% { transform: scale( 1 ); } 53 | 80% { transform: scale( .75 ); } 54 | 100% { transform: scale( .75 ); } 55 | } 56 | 57 | 58 | // Datetimepicker 59 | 60 | .datepicker { 61 | .table-condensed { 62 | tbody > tr:first-of-type { 63 | .day { 64 | padding-top: 5px; 65 | } 66 | } 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/sass/paper/_mixins.scss: -------------------------------------------------------------------------------- 1 | //Utilities 2 | @import "mixins/transparency"; 3 | 4 | @import "mixins/vendor-prefixes"; 5 | @import "mixins/vendor-prefixes-extend"; 6 | @import "mixins/buttons"; 7 | @import "mixins/inputs"; 8 | @import "mixins/dropdown"; 9 | @import "mixins/page-header"; 10 | @import "mixins/cards"; 11 | 12 | //Components 13 | @import "mixins/social-buttons"; 14 | @import "mixins/wizard"; 15 | @import "mixins/tags"; 16 | 17 | @import "mixins/badges"; 18 | @import "mixins/popovers"; 19 | @import "mixins/modals"; 20 | @import "mixins/chartist"; 21 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/sass/paper/_progress.scss: -------------------------------------------------------------------------------- 1 | .progress { 2 | background-color: $medium-gray; 3 | border-radius: $border-radius-small; 4 | box-shadow: none; 5 | height: 8px; 6 | } 7 | .progress-thin{ 8 | height: 4px; 9 | } 10 | .progress-bar{ 11 | background-color: $primary-color; 12 | } 13 | .progress-bar-primary{ 14 | background-color: $primary-color; 15 | } 16 | .progress-bar-info{ 17 | background-color: $info-color; 18 | } 19 | .progress-bar-success{ 20 | background-color: $success-color; 21 | } 22 | .progress-bar-warning{ 23 | background-color: $warning-color; 24 | } 25 | .progress-bar-danger{ 26 | background-color: $danger-color; 27 | } 28 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/sass/paper/_social-buttons.scss: -------------------------------------------------------------------------------- 1 | 2 | 3 | .btn{ 4 | // social buttons 5 | &.btn-facebook { 6 | @include social-buttons-color($social-facebook, $social-facebook-state-color); 7 | } 8 | &.btn-twitter { 9 | @include social-buttons-color($social-twitter, $social-twitter-state-color); 10 | } 11 | &.btn-pinterest { 12 | @include social-buttons-color($social-pinterest, $social-pinterest-state-color); 13 | } 14 | &.btn-google { 15 | @include social-buttons-color($social-google, $social-google-state-color); 16 | } 17 | &.btn-linkedin { 18 | @include social-buttons-color($social-linkedin, $social-linkedin-state-color); 19 | } 20 | &.btn-dribbble { 21 | @include social-buttons-color($social-dribbble, $social-dribbble-state-color); 22 | } 23 | &.btn-github { 24 | @include social-buttons-color($social-github, $social-github-state-color); 25 | } 26 | &.btn-youtube { 27 | @include social-buttons-color($social-youtube, $social-youtube-state-color); 28 | } 29 | &.btn-instagram { 30 | @include social-buttons-color($social-instagram, $social-instagram-state-color); 31 | } 32 | &.btn-reddit { 33 | @include social-buttons-color($social-reddit, $social-reddit-state-color); 34 | } 35 | &.btn-tumblr { 36 | @include social-buttons-color($social-tumblr, $social-tumblr-state-color); 37 | } 38 | &.btn-behance { 39 | @include social-buttons-color($social-behance, $social-behance-state-color); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/sass/paper/cards/_card-background.scss: -------------------------------------------------------------------------------- 1 | .card-background{ 2 | background-position: center center; 3 | background-size: cover; 4 | text-align: center; 5 | 6 | .card-body{ 7 | position: relative; 8 | z-index: 2; 9 | min-height: 370px; 10 | max-width: 530px; 11 | margin: 0 auto; 12 | padding-top: 60px; 13 | padding-bottom: 60px;; 14 | } 15 | .card-footer{ 16 | position: relative; 17 | z-index: 2; 18 | } 19 | 20 | &.card-background-product .card-body{ 21 | max-width: 400px; 22 | .card-title{ 23 | margin-top: 30px; 24 | } 25 | } 26 | 27 | .stats{ 28 | color: $white-color; 29 | } 30 | 31 | .card-footer{ 32 | .stats-link > a{ 33 | color: $white-color; 34 | line-height: 1.9; 35 | } 36 | } 37 | 38 | .category, 39 | .card-description, 40 | small{ 41 | color: $opacity-8; 42 | } 43 | 44 | .card-title { 45 | color: $white-color; 46 | margin-top: 130px; 47 | } 48 | 49 | &:not(.card-pricing) .btn { 50 | margin-bottom: 0; 51 | } 52 | 53 | &::after { 54 | position: absolute; 55 | z-index: 1; 56 | width: 100%; 57 | height: 100%; 58 | display: block; 59 | left: 0; 60 | top: 0; 61 | content: ""; 62 | background-color: rgba(0,0,0,.63); 63 | border-radius: $border-radius-large; 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/sass/paper/cards/_card-chart.scss: -------------------------------------------------------------------------------- 1 | .card-chart { 2 | .card-header{ 3 | .card-title{ 4 | margin-top: 10px; 5 | margin-bottom: 0; 6 | } 7 | .card-category{ 8 | margin-bottom: 5px; 9 | } 10 | } 11 | 12 | .table{ 13 | margin-bottom: 0; 14 | 15 | td{ 16 | border-top: none; 17 | border-bottom: 1px solid #e9ecef; 18 | } 19 | } 20 | 21 | .card-progress { 22 | margin-top: 30px; 23 | } 24 | 25 | .chart-area { 26 | height: 190px; 27 | width: calc(100% + 30px); 28 | margin-left: -15px; 29 | margin-right: -15px; 30 | } 31 | .card-footer { 32 | margin-top: 15px; 33 | 34 | .stats{ 35 | color: $dark-gray; 36 | } 37 | } 38 | 39 | .dropdown{ 40 | position: absolute; 41 | right: 20px; 42 | top: 20px; 43 | 44 | .btn{ 45 | margin: 0; 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/sass/paper/cards/_card-collapse.scss: -------------------------------------------------------------------------------- 1 | .card-collapse{ 2 | padding-bottom: 10px; 3 | .card{ 4 | margin-bottom: 0px; 5 | 6 | .card-header{ 7 | position: relative; 8 | padding: 20px 0; 9 | 10 | a[data-toggle="collapse"]{ 11 | display: block; 12 | color: $light-black; 13 | 14 | i{ 15 | float: right; 16 | position: relative; 17 | color: #f96332; 18 | top: 3px; 19 | right: 5px; 20 | @extend .animation-transition-general; 21 | } 22 | } 23 | 24 | &:after{ 25 | content: ""; 26 | position: absolute; 27 | bottom: 0; 28 | left: 0; 29 | width: 100%; 30 | height: 1px; 31 | background-color: $light-gray; 32 | } 33 | } 34 | 35 | .card-body{ 36 | padding: 20px 15px; 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/sass/paper/cards/_card-contributions.scss: -------------------------------------------------------------------------------- 1 | .card-contributions{ 2 | @extend %card-stats; 3 | 4 | .card-description{ 5 | max-width: 350px; 6 | margin: 0 auto; 7 | margin-bottom: 20px; 8 | } 9 | 10 | .card-title{ 11 | padding-top: 35px; 12 | } 13 | 14 | .card-stats{ 15 | display: flex; 16 | align-items: center; 17 | flex-direction: row; 18 | padding: 11px; 19 | } 20 | 21 | .card-footer{ 22 | [class*="col-"]:not(:first-child):before{ 23 | content: ""; 24 | position: absolute; 25 | left: 0; 26 | width: 1px; 27 | height: 100%; 28 | background-color: $hr-line; 29 | } 30 | } 31 | 32 | .bootstrap-switch{ 33 | margin: 0; 34 | } 35 | 36 | span{ 37 | padding-left: 15px; 38 | text-align: left; 39 | max-width: 125px; 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/sass/paper/cards/_card-info-area.scss: -------------------------------------------------------------------------------- 1 | .card .info-area{ 2 | padding: 40px 0 40px; 3 | text-align: center; 4 | position: relative; 5 | z-index: 2; 6 | } 7 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/sass/paper/cards/_card-lock.scss: -------------------------------------------------------------------------------- 1 | .card-lock{ 2 | .card-header{ 3 | img{ 4 | width: 120px; 5 | height: 120px; 6 | border-radius: 50%; 7 | margin-top: -70px; 8 | } 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/sass/paper/cards/_card-map.scss: -------------------------------------------------------------------------------- 1 | .map{ 2 | height: 500px; 3 | } 4 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/sass/paper/cards/_card-plain.scss: -------------------------------------------------------------------------------- 1 | 2 | .card-plain{ 3 | background: transparent; 4 | box-shadow: none; 5 | 6 | .card-header, 7 | .card-footer{ 8 | margin-left: 0; 9 | margin-right: 0; 10 | background-color: transparent; 11 | } 12 | 13 | &:not(.card-subcategories).card-body{ 14 | padding-left: 0; 15 | padding-right: 0; 16 | } 17 | } 18 | 19 | .card-transparent { 20 | background: transparent; 21 | box-shadow: none; 22 | } 23 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/sass/paper/cards/_card-profile.scss: -------------------------------------------------------------------------------- 1 | %card-profile{ 2 | margin-top: 30px; 3 | text-align: center; 4 | 5 | .card-body .card-title{ 6 | margin-top: 0; 7 | } 8 | 9 | [class*=col-]{ 10 | .card-description{ 11 | margin-bottom: 0; 12 | 13 | & + .card-footer{ 14 | margin-top: 8px; 15 | } 16 | } 17 | 18 | 19 | } 20 | 21 | .card-header-avatar{ 22 | max-width: 130px; 23 | max-height: 130px; 24 | margin: -60px auto 0; 25 | 26 | img{ 27 | border-radius: 50% !important; 28 | } 29 | 30 | & + .card-body{ 31 | margin-top: 15px; 32 | } 33 | } 34 | 35 | &.card-plain{ 36 | .card-header-avatar{ 37 | margin-top: 0; 38 | } 39 | } 40 | .card-body{ 41 | .card-avatar{ 42 | margin: 0 auto 30px; 43 | } 44 | } 45 | } 46 | 47 | .card-profile{ 48 | @extend %card-profile; 49 | } 50 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/sass/paper/cards/_card-signup.scss: -------------------------------------------------------------------------------- 1 | .card-signup{ 2 | .header{ 3 | margin-left: 20px; 4 | margin-right: 20px; 5 | padding: 30px 0; 6 | } 7 | .text-divider{ 8 | margin-top: 30px; 9 | margin-bottom: 0px; 10 | text-align: center; 11 | } 12 | .content{ 13 | padding: 0px 30px; 14 | } 15 | 16 | .form-check{ 17 | margin-top: 20px; 18 | 19 | label{ 20 | margin-left: 7px; 21 | padding-left: 38px; 22 | } 23 | } 24 | 25 | .social-line{ 26 | margin-top: 20px; 27 | text-align: center; 28 | 29 | .btn.btn-icon , 30 | .btn.btn-icon .btn-icon{ 31 | margin-left: 5px; 32 | margin-right: 5px; 33 | box-shadow: 0px 5px 50px 0px rgba(0, 0, 0, 0.2); 34 | } 35 | } 36 | 37 | .card-footer{ 38 | margin-bottom: 10px; 39 | margin-top: 24px; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/sass/paper/cards/_card-stats-mini.scss: -------------------------------------------------------------------------------- 1 | .card-stats-mini { 2 | &.card-background::after { 3 | background-image: linear-gradient(to right, #434343 0%, black 100%); 4 | opacity: .94; 5 | } 6 | 7 | .card-body { 8 | &::after { 9 | clear: both; 10 | content: ''; 11 | display: block; 12 | } 13 | } 14 | 15 | .card-footer { 16 | border-top: 1px solid $opacity-2; 17 | margin: 0 15px; 18 | } 19 | 20 | &.card-background { 21 | .card-body { 22 | min-height: auto; 23 | padding-top: 15px; 24 | padding-bottom: 15px; 25 | } 26 | } 27 | 28 | .card-title { 29 | margin-top: 0; 30 | margin-bottom: 5px; 31 | } 32 | 33 | .info-area { 34 | text-align: left; 35 | width: 40%; 36 | float: left; 37 | padding: 15px 0; 38 | 39 | .icon > i { 40 | font-size: 2em; 41 | } 42 | } 43 | 44 | .chart-area { 45 | float: left; 46 | width: 60%; 47 | } 48 | 49 | .stats { 50 | text-align: left; 51 | color: $white-color; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/sass/paper/cards/_card-stats.scss: -------------------------------------------------------------------------------- 1 | %card-stats{ 2 | hr{ 3 | margin: 5px 15px; 4 | } 5 | } 6 | 7 | 8 | .card-stats{ 9 | .card-body{ 10 | padding: 15px 15px 0px; 11 | 12 | .numbers{ 13 | text-align: right; 14 | font-size: 2em; 15 | 16 | p{ 17 | margin-bottom: 0; 18 | } 19 | .card-category { 20 | color: $dark-gray; 21 | font-size: 16px; 22 | line-height: 1.4em; 23 | } 24 | } 25 | } 26 | .card-footer{ 27 | padding: 0px 15px 15px; 28 | 29 | .stats{ 30 | color: $dark-gray; 31 | } 32 | 33 | hr{ 34 | margin-top: 10px; 35 | margin-bottom: 15px; 36 | } 37 | } 38 | .icon-big { 39 | font-size: 3em; 40 | min-height: 64px; 41 | 42 | i{ 43 | line-height: 59px; 44 | } 45 | } 46 | 47 | 48 | } 49 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/sass/paper/cards/_card-subcategories.scss: -------------------------------------------------------------------------------- 1 | .card-subcategories .card-body{ 2 | padding-bottom: 30px; 3 | } 4 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/sass/paper/cards/_card-tasks.scss: -------------------------------------------------------------------------------- 1 | .card-tasks{ 2 | text-align: left; 3 | .table tbody{ 4 | td:last-child{ 5 | padding-right: 0; 6 | display: inline-flex; 7 | .btn{ 8 | padding: 3px; 9 | } 10 | } 11 | td:first-child{ 12 | padding-left: 0; 13 | } 14 | td { 15 | padding: 12px 8px !important; 16 | } 17 | } 18 | .table-full-width{ 19 | padding-bottom: 0 !important; 20 | } 21 | .card-footer{ 22 | padding-top: 0; 23 | } 24 | .table{ 25 | margin-bottom: 0 !important; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/sass/paper/cards/_card-testimonials.scss: -------------------------------------------------------------------------------- 1 | .card-testimonial{ 2 | margin-top: 30px; 3 | text-align: center; 4 | 5 | .icon{ 6 | padding: 0; 7 | 8 | i{ 9 | font-size: 30px; 10 | border: 0; 11 | display: block; 12 | line-height: 100px; 13 | margin: 0px auto; 14 | margin-bottom: 0px; 15 | } 16 | } 17 | .card-body{ 18 | padding: 15px 30px; 19 | 20 | .card-description{ 21 | font-style: italic; 22 | font-size: 16px; 23 | } 24 | .card-category{ 25 | margin-bottom: 20px; 26 | } 27 | 28 | +.card-footer { 29 | padding-top: 0; 30 | margin-top: -20px; 31 | } 32 | } 33 | 34 | .card-avatar{ 35 | margin-top: 0; 36 | .img{ 37 | border-radius: 50%; 38 | width: 100px; 39 | height: 100px; 40 | } 41 | } 42 | 43 | .card-footer{ 44 | .card-title{ 45 | color: $black-color; 46 | text-align: center; 47 | } 48 | .card-category{ 49 | color: $dark-gray; 50 | } 51 | .card-avatar{ 52 | margin-top: 20px; 53 | .img{ 54 | border-radius: 50%; 55 | width: 60px; 56 | height: 60px; 57 | } 58 | } 59 | } 60 | } 61 | 62 | .card-testimonial .card-description + .card-title{ 63 | margin-top: 30px; 64 | 65 | & .card-image{ 66 | .img{ 67 | border-radius: $border-radius-extreme; 68 | } 69 | 70 | .card-title{ 71 | text-align: center; 72 | } 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/sass/paper/cards/_card-user.scss: -------------------------------------------------------------------------------- 1 | .card-user{ 2 | .image{ 3 | height: 130px; 4 | 5 | img { 6 | border-radius: 12px; 7 | } 8 | } 9 | 10 | .author{ 11 | text-align: center; 12 | text-transform: none; 13 | margin-top: -77px; 14 | 15 | a + p.description{ 16 | margin-top: -7px; 17 | } 18 | } 19 | 20 | .avatar{ 21 | width: 124px; 22 | height: 124px; 23 | border: 1px solid $white-color; 24 | position: relative; 25 | } 26 | 27 | .card-body{ 28 | min-height: 240px; 29 | } 30 | 31 | hr{ 32 | margin: 5px 15px 15px; 33 | } 34 | 35 | .card-body + .card-footer { 36 | padding-top: 0; 37 | } 38 | 39 | .card-footer { 40 | h5 { 41 | font-size: 1.25em; 42 | margin-bottom: 0; 43 | } 44 | } 45 | 46 | .button-container{ 47 | margin-bottom: 6px; 48 | text-align: center; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/sass/paper/mixins/_badges.scss: -------------------------------------------------------------------------------- 1 | @mixin badge-color($color) { 2 | border-color: $color; 3 | background-color: $color; 4 | } 5 | 6 | @mixin badge-hover-href($color, $bg-color) { 7 | color: $color; 8 | background-color: $bg-color; 9 | border-color: $bg-color; 10 | } 11 | 12 | @mixin badges-color($color){ 13 | .tag{ 14 | background-color: $color; 15 | color: $white-color; 16 | 17 | .tagsinput-remove-link{ 18 | color: $white-color; 19 | } 20 | } 21 | } 22 | @mixin create-colored-badges(){ 23 | &.primary-badge{ 24 | @include badges-color($brand-primary); 25 | } 26 | &.info-badge { 27 | @include badges-color($brand-info); 28 | } 29 | &.success-badge{ 30 | @include badges-color($brand-success); 31 | } 32 | &.warning-badge{ 33 | @include badges-color($brand-warning); 34 | } 35 | &.danger-badge{ 36 | @include badges-color($brand-danger); 37 | } 38 | 39 | } 40 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/sass/paper/mixins/_cards.scss: -------------------------------------------------------------------------------- 1 | @mixin icon-color($color) { 2 | box-shadow: 0px 9px 30px -6px $color; 3 | color: $color; 4 | } 5 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/sass/paper/mixins/_dropdown.scss: -------------------------------------------------------------------------------- 1 | @mixin dropdown-colors($brand-color, $dropdown-header-color, $dropdown-color, $background-color ) { 2 | background-color: $brand-color; 3 | 4 | &:before{ 5 | color: $brand-color; 6 | } 7 | 8 | .dropdown-header:not([href]):not([tabindex]){ 9 | color: $dropdown-header-color; 10 | } 11 | 12 | .dropdown-item{ 13 | color: $dropdown-color; 14 | 15 | &:hover, 16 | &:focus{ 17 | background-color: $background-color; 18 | } 19 | } 20 | 21 | .dropdown-divider{ 22 | background-color: $background-color; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/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 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/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 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/sass/paper/mixins/_modals.scss: -------------------------------------------------------------------------------- 1 | @mixin modal-colors($bg-color, $color) { 2 | .modal-content{ 3 | background-color: $bg-color; 4 | color: $color; 5 | } 6 | 7 | .modal-header .close{ 8 | color: $color; 9 | } 10 | 11 | //inputs 12 | @include input-coloured-bg($opacity-5, $white-color, $white-color, $transparent-bg, $opacity-1, $opacity-2); 13 | 14 | .input-group-addon, 15 | .form-group.no-border .input-group-addon, 16 | .input-group.no-border .input-group-addon{ 17 | color: $opacity-8; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/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 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/sass/paper/mixins/_page-header.scss: -------------------------------------------------------------------------------- 1 | @mixin linear-gradient($color1, $color2){ 2 | background: $color1; /* For browsers that do not support gradients */ 3 | background: -webkit-linear-gradient(90deg, $color1 , $color2); /* For Safari 5.1 to 6.0 */ 4 | background: -o-linear-gradient(90deg, $color1, $color2); /* For Opera 11.1 to 12.0 */ 5 | background: -moz-linear-gradient(90deg, $color1, $color2); /* For Firefox 3.6 to 15 */ 6 | background: linear-gradient(0deg, $color1 , $color2); /* Standard syntax */ 7 | } 8 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/sass/paper/mixins/_popovers.scss: -------------------------------------------------------------------------------- 1 | @mixin popover-color($color, $text-color) { 2 | background-color: $color; 3 | 4 | .popover-body{ 5 | color: $text-color; 6 | } 7 | 8 | 9 | &.bs-popover-right .arrow:after{ 10 | border-right-color:$color; 11 | } 12 | 13 | &.bs-popover-top .arrow:after{ 14 | border-top-color:$color; 15 | } 16 | 17 | &.bs-popover-bottom .arrow:after{ 18 | border-bottom-color:$color; 19 | } 20 | 21 | &.bs-popover-left .arrow:after{ 22 | border-left-color:$color; 23 | } 24 | 25 | .popover-header{ 26 | color: $text-color; 27 | opacity: .6; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/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 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/sass/paper/mixins/_social-buttons.scss: -------------------------------------------------------------------------------- 1 | // for social buttons 2 | @mixin social-buttons-color ($color, $state-color){ 3 | background-color: $color; 4 | color: $white-color; 5 | 6 | &:focus, 7 | &:active, 8 | &:hover{ 9 | background-color: $state-color !important; 10 | color: $white-color !important; 11 | } 12 | 13 | &.btn-simple{ 14 | color: $color; 15 | background-color: $transparent-bg; 16 | box-shadow: none; 17 | border-color: $color; 18 | 19 | &:hover, 20 | &:focus, 21 | &:active{ 22 | color: $state-color; 23 | border-color: $state-color; 24 | } 25 | } 26 | 27 | &.btn-neutral{ 28 | color: $color; 29 | background-color: $white-color; 30 | 31 | 32 | &:hover, 33 | &:focus, 34 | &:active{ 35 | color: $state-color !important; 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/sass/paper/mixins/_tabs.scss: -------------------------------------------------------------------------------- 1 | @mixin pill-style($color) { 2 | border: 1px solid $color; 3 | color: $color; 4 | } 5 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/sass/paper/mixins/_tags.scss: -------------------------------------------------------------------------------- 1 | @mixin tag-color ($color){ 2 | background-color: $color; 3 | color: $white-color; 4 | border:none; 5 | .tagsinput-remove-link{ 6 | color: $white-color; 7 | } 8 | .tagsinput-add{ 9 | color: $color; 10 | } 11 | } 12 | 13 | @mixin create-colored-tags(){ 14 | &.tag-primary{ 15 | @include tag-color($brand-primary); 16 | } 17 | &.tag-info { 18 | @include tag-color($brand-info); 19 | } 20 | &.tag-success{ 21 | @include tag-color($brand-success); 22 | } 23 | &.tag-warning{ 24 | @include tag-color($brand-warning); 25 | } 26 | &.tag-danger{ 27 | @include tag-color($brand-danger); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/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 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/sass/paper/mixins/_wizard.scss: -------------------------------------------------------------------------------- 1 | @mixin set-wizard-color($color) { 2 | .moving-tab{ 3 | color: $color; 4 | } 5 | 6 | .picture{ 7 | &:hover{ 8 | border-color: $color; 9 | } 10 | } 11 | 12 | .choice{ 13 | &:hover, 14 | &.active{ 15 | .icon{ 16 | border-color: $color; 17 | color: $color; 18 | } 19 | } 20 | } 21 | 22 | // .form-group{ 23 | // .form-control{ 24 | // background-image: linear-gradient($color, $color), linear-gradient($mdb-input-underline-color, $mdb-input-underline-color); 25 | // } 26 | // } 27 | 28 | .checkbox input[type=checkbox]:checked + .checkbox-material{ 29 | .check{ 30 | background-color: $color; 31 | } 32 | } 33 | 34 | .radio input[type=radio]:checked ~ .check { 35 | background-color: $color; 36 | } 37 | 38 | .radio input[type=radio]:checked ~ .circle { 39 | border-color: $color; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/sass/paper/plugins/_plugin-nprogress.scss: -------------------------------------------------------------------------------- 1 | /* Make clicks pass-through */ 2 | @import "../variables"; 3 | #nprogress { 4 | pointer-events: none; 5 | } 6 | 7 | #nprogress .bar { 8 | background: $primary-color; 9 | 10 | position: fixed; 11 | z-index: 1031; 12 | top: 0; 13 | left: 0; 14 | 15 | width: 100%; 16 | height: 2px; 17 | } 18 | 19 | /* Fancy blur effect */ 20 | #nprogress .peg { 21 | display: block; 22 | position: absolute; 23 | right: 0px; 24 | width: 100px; 25 | height: 100%; 26 | box-shadow: 0 0 10px $primary-color, 0 0 5px $primary-color; 27 | opacity: 1.0; 28 | 29 | -webkit-transform: rotate(3deg) translate(0px, -4px); 30 | -ms-transform: rotate(3deg) translate(0px, -4px); 31 | transform: rotate(3deg) translate(0px, -4px); 32 | } 33 | 34 | /* Remove these to get rid of the spinner */ 35 | #nprogress .spinner { 36 | display: block; 37 | position: fixed; 38 | z-index: 1031; 39 | top: 15px; 40 | right: 15px; 41 | } 42 | 43 | #nprogress .spinner-icon { 44 | width: 18px; 45 | height: 18px; 46 | box-sizing: border-box; 47 | 48 | border: solid 2px transparent; 49 | border-top-color: $primary-color; 50 | border-left-color: $primary-color; 51 | border-radius: 50%; 52 | 53 | -webkit-animation: nprogress-spinner 400ms linear infinite; 54 | animation: nprogress-spinner 400ms linear infinite; 55 | } 56 | 57 | .nprogress-custom-parent { 58 | overflow: hidden; 59 | position: relative; 60 | } 61 | 62 | .nprogress-custom-parent #nprogress .spinner, 63 | .nprogress-custom-parent #nprogress .bar { 64 | position: absolute; 65 | } 66 | 67 | @-webkit-keyframes nprogress-spinner { 68 | 0% { -webkit-transform: rotate(0deg); } 69 | 100% { -webkit-transform: rotate(360deg); } 70 | } 71 | @keyframes nprogress-spinner { 72 | 0% { transform: rotate(0deg); } 73 | 100% { transform: rotate(360deg); } 74 | } 75 | 76 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/sass/paper/plugins/_plugin-vue-notifyjs.scss: -------------------------------------------------------------------------------- 1 | .notifications.vue-notifyjs { 2 | .alert { 3 | z-index: 1000; 4 | position: fixed; 5 | } 6 | .notification-list-move { 7 | transition: transform 0.3s, opacity 0.4s; 8 | } 9 | .notification-list-item { 10 | display: inline-block; 11 | margin-right: 10px; 12 | 13 | } 14 | .notification-list-enter-active, .notification-list-leave-active { 15 | transition: opacity 0.4s; 16 | } 17 | .notification-list-enter, .notification-list-leave-to /* .list-leave-active for <2.1.8 */ 18 | { 19 | opacity: 0; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/sass/paper/plugins/element-ui/_plugin-inputs.scss: -------------------------------------------------------------------------------- 1 | @import "../../variables"; 2 | 3 | .form-group { 4 | .el-date-editor { 5 | width: 100% !important; 6 | } 7 | .el-input__inner { 8 | @extend .form-control; 9 | width: 100%; 10 | } 11 | .el-select{ 12 | width: 100%; 13 | .el-input__inner{ 14 | cursor: pointer !important; 15 | } 16 | } 17 | .el-input-number{ 18 | width: 100%; 19 | .plus-button{ 20 | @extend .btn-round, .btn-primary; 21 | padding: 0 !important; 22 | border: 0; 23 | } 24 | .el-input-number__decrease{ 25 | @extend .plus-button; 26 | border-radius: $btn-round-radius 0 0 $btn-round-radius !important; 27 | } 28 | .el-input-number__increase{ 29 | @extend .plus-button; 30 | border-radius: 0 $btn-round-radius $btn-round-radius 0 !important; 31 | } 32 | } 33 | } 34 | 35 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/sass/paper/plugins/element-ui/_plugin-slider.scss: -------------------------------------------------------------------------------- 1 | @import "../../variables"; 2 | 3 | @mixin slider($name, $color, $height: 6px){ 4 | .slider-#{$name}{ 5 | .el-slider__bar { 6 | height: $height; 7 | background-color: $color; 8 | } 9 | .el-tooltip{ 10 | border: none; 11 | } 12 | .el-slider__button{ 13 | &.hover, 14 | &:hover, 15 | &.dragging { 16 | background-color: darken($color, 10%) 17 | } 18 | background-color: $color; 19 | height: $height * 3; 20 | width: $height * 3; 21 | } 22 | } 23 | } 24 | 25 | @include slider('info', $info-color) 26 | @include slider('primary', $primary-color) 27 | @include slider('success', $success-color) 28 | @include slider('warning', $warning-color) 29 | @include slider('danger', $danger-color) 30 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/sass/paper/plugins/element-ui/_plugin-tables.scss: -------------------------------------------------------------------------------- 1 | @import "../../variables"; 2 | 3 | // Element UI override 4 | 5 | .el-table table { 6 | @extend .table; 7 | } 8 | 9 | .el-table { 10 | .td-total { 11 | font-weight: $font-weight-bold; 12 | font-size: $font-size-h5; 13 | padding-top: 20px; 14 | text-align: right; 15 | } 16 | .td-price{ 17 | font-size: 26px; 18 | font-weight: $font-weight-light; 19 | margin-top: 5px; 20 | position: relative; 21 | top: 4px; 22 | text-align: right; 23 | } 24 | 25 | .table-actions{ 26 | .btn{ 27 | margin-right: 5px; 28 | &:last-child{ 29 | margin-right: 0px; 30 | } 31 | } 32 | } 33 | } 34 | 35 | .el-table, 36 | .el-table tr, 37 | .el-table thead th{ 38 | background-color: transparent !important; 39 | } 40 | 41 | .table-shopping .el-table table { 42 | @extend .table-shopping; 43 | } 44 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/assets/sass/paper/plugins/element-ui/_plugin-tags.scss: -------------------------------------------------------------------------------- 1 | @import "../../variables"; 2 | 3 | @mixin tag($type, $color){ 4 | .input-new-tag.input-#{$type} .el-input__inner{ 5 | border-color: $color !important; 6 | } 7 | .el-tag, 8 | .el-tag.el-tag--#{$type} { 9 | .el-tag__close { 10 | color: white; 11 | } 12 | .el-tag__close:hover{ 13 | background-color: white; 14 | color: $color; 15 | } 16 | background-color: $color !important; 17 | color: white; 18 | 19 | } 20 | } 21 | .el-tag{ 22 | border-radius: 12px !important; 23 | margin-left:10px; 24 | margin-bottom:5px; 25 | } 26 | .input-new-tag{ 27 | margin-left:10px; 28 | width: 150px !important; 29 | height: 32px; 30 | display: inline; 31 | 32 | } 33 | 34 | @include tag('info', $info-color) 35 | @include tag('primary', $primary-color) 36 | @include tag('success', $success-color) 37 | @include tag('warning', $warning-color) 38 | @include tag('danger', $danger-color) 39 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/components/Dashboard/Layout/Content.vue: -------------------------------------------------------------------------------- 1 | 10 | 13 | 27 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/components/Dashboard/Layout/LoadingMainPanel.vue: -------------------------------------------------------------------------------- 1 | 5 | 12 | 27 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/components/Dashboard/Views/Components/NotificationTemplate.vue: -------------------------------------------------------------------------------- 1 | 4 | 7 | 9 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/components/Dashboard/Views/Dashboard/Widgets/Task.vue: -------------------------------------------------------------------------------- 1 | 27 | 55 | 57 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/components/Dashboard/Views/Examples/UserProfile.vue: -------------------------------------------------------------------------------- 1 | 12 | 40 | 43 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/components/Dashboard/Views/Maps/API_KEY.js: -------------------------------------------------------------------------------- 1 | export const API_KEY = process.env.VUE_APP_API_KEY; 2 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/components/Dashboard/Views/Maps/GoogleMaps.vue: -------------------------------------------------------------------------------- 1 | 15 | 45 | 46 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/components/Dashboard/Views/Pages/Layout/AppNavbar.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | 35 | 36 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/components/Dashboard/Views/Pages/UserProfile.vue: -------------------------------------------------------------------------------- 1 | 18 | 32 | 35 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/components/Dashboard/Views/Pages/UserProfile/UserCard.vue: -------------------------------------------------------------------------------- 1 | 49 | 53 | 56 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/components/UIComponents/Badge.vue: -------------------------------------------------------------------------------- 1 | 11 | 37 | 39 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/components/UIComponents/Cards/StatsCard.vue: -------------------------------------------------------------------------------- 1 | 30 | 54 | 59 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/components/UIComponents/Charts/mixins/reactiveChart.js: -------------------------------------------------------------------------------- 1 | import { Line, mixins } from 'vue-chartjs' 2 | 3 | export default { 4 | mixins: [mixins.reactiveData], 5 | data() { 6 | return { 7 | fallBackColor: '#f96332', 8 | options: {} 9 | } 10 | }, 11 | watch: { 12 | data: { 13 | deep: true, 14 | handler(data) { 15 | this.chartData = this.assignChartData({ data }); 16 | } 17 | }, 18 | datasets(datasets) { 19 | console.log('Dataset change') 20 | this.chartData = this.assignChartData({ datasets }); 21 | } 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/components/UIComponents/Charts/plugins/plugin-chart-text.js: -------------------------------------------------------------------------------- 1 | export default { 2 | id: 'text-plugin', 3 | beforeDraw: function(chart) { 4 | if (chart.config.options.elements.center) { 5 | //Get ctx from string 6 | let ctx = chart.chart.ctx; 7 | 8 | //Get options from the center object in options 9 | let centerConfig = chart.config.options.elements.center; 10 | let fontStyle = centerConfig.fontStyle || 'Arial'; 11 | let txt = centerConfig.text; 12 | let color = centerConfig.color || '#000'; 13 | let sidePadding = centerConfig.sidePadding || 20; 14 | let sidePaddingCalculated = (sidePadding / 100) * (chart.innerRadius * 2) 15 | //Start with a base font of 30px 16 | ctx.font = "30px " + fontStyle; 17 | 18 | //Get the width of the string and also the width of the element minus 10 to give it 5px side padding 19 | let stringWidth = ctx.measureText(txt).width; 20 | let elementWidth = (chart.innerRadius * 2) - sidePaddingCalculated; 21 | 22 | // Find out how much the font can grow in width. 23 | let widthRatio = elementWidth / stringWidth; 24 | let newFontSize = Math.floor(30 * widthRatio); 25 | let elementHeight = (chart.innerRadius * 2); 26 | 27 | // Pick a new font size so it will not be larger than the height of label. 28 | let fontSizeToUse = Math.min(newFontSize, elementHeight); 29 | 30 | //Set font settings to draw it correctly. 31 | ctx.textAlign = 'center'; 32 | ctx.textBaseline = 'middle'; 33 | let centerX = ((chart.chartArea.left + chart.chartArea.right) / 2); 34 | let centerY = ((chart.chartArea.top + chart.chartArea.bottom) / 2); 35 | ctx.font = fontSizeToUse + "px " + fontStyle; 36 | ctx.fillStyle = color; 37 | 38 | //Draw text in center 39 | ctx.fillText(txt, centerX, centerY); 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/components/UIComponents/Charts/utils.js: -------------------------------------------------------------------------------- 1 | export function hexToRGB(hex, alpha) { 2 | const r = parseInt(hex.slice(1, 3), 16), 3 | g = parseInt(hex.slice(3, 5), 16), 4 | b = parseInt(hex.slice(5, 7), 16); 5 | 6 | if (alpha) { 7 | return `rgba(${r},${g},${b}, ${alpha})`; 8 | } else { 9 | return `rgb(${r},${g},${b})`; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/components/UIComponents/InfoSection.vue: -------------------------------------------------------------------------------- 1 | 16 | 44 | 46 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/components/UIComponents/Inputs/Checkbox.vue: -------------------------------------------------------------------------------- 1 | 17 | 66 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/components/UIComponents/Inputs/IconCheckbox.vue: -------------------------------------------------------------------------------- 1 | 20 | 56 | 58 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/components/UIComponents/Inputs/Radio.vue: -------------------------------------------------------------------------------- 1 | 16 | 63 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/components/UIComponents/Navbar/NavbarToggleButton.vue: -------------------------------------------------------------------------------- 1 | 8 | 13 | 15 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/components/UIComponents/Progress.vue: -------------------------------------------------------------------------------- 1 | 17 | 42 | 44 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/components/UIComponents/SidebarPlugin/SidebarLink.vue: -------------------------------------------------------------------------------- 1 | 17 | 65 | 67 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/components/UIComponents/SidebarPlugin/index.js: -------------------------------------------------------------------------------- 1 | import Sidebar from './SideBar.vue' 2 | import SidebarItem from './SidebarItem.vue' 3 | 4 | const SidebarStore = { 5 | showSidebar: false, 6 | sidebarLinks: [], 7 | isMinimized: false, 8 | displaySidebar (value) { 9 | this.showSidebar = value 10 | }, 11 | toggleMinimize () { 12 | document.body.classList.toggle('sidebar-mini') 13 | // we simulate the window Resize so the charts will get updated in realtime. 14 | const simulateWindowResize = setInterval(() => { 15 | window.dispatchEvent(new Event('resize')) 16 | }, 180) 17 | 18 | // we stop the simulation of Window Resize after the animations are completed 19 | setTimeout(() => { 20 | clearInterval(simulateWindowResize) 21 | }, 1000) 22 | 23 | this.isMinimized = !this.isMinimized 24 | } 25 | } 26 | 27 | const SidebarPlugin = { 28 | 29 | install (Vue, options) { 30 | if (options && options.sidebarLinks) { 31 | SidebarStore.sidebarLinks = options.sidebarLinks 32 | } 33 | Vue.mixin({ 34 | data () { 35 | return { 36 | sidebarStore: SidebarStore 37 | } 38 | } 39 | }) 40 | 41 | Vue.prototype.$sidebar = SidebarStore 42 | Object.defineProperty(Vue.prototype, '$sidebar', { 43 | get () { 44 | return this.$root.sidebarStore 45 | } 46 | }) 47 | Vue.component('side-bar', Sidebar) 48 | Vue.component('sidebar-item', SidebarItem) 49 | } 50 | } 51 | 52 | export default SidebarPlugin 53 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/components/UIComponents/Tabs/PillsLayout.vue: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/components/UIComponents/Tabs/Tab.vue: -------------------------------------------------------------------------------- 1 | 9 | 41 | 43 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/components/UIComponents/Tabs/TabsLayout.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 26 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/components/UIComponents/TimeLine/TimeLine.vue: -------------------------------------------------------------------------------- 1 | 10 | 22 | 24 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/components/UIComponents/TimeLine/TimeLineItem.vue: -------------------------------------------------------------------------------- 1 | 21 | 42 | 44 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/components/UIComponents/ValidationError.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 18 | 19 | 27 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/components/UIComponents/Wizard/WizardTab.vue: -------------------------------------------------------------------------------- 1 | 11 | 48 | 50 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/components/UIComponents/index.js: -------------------------------------------------------------------------------- 1 | import Button from './Button' 2 | import Badge from './Badge' 3 | import Card from './Cards/Card' 4 | import Dropdown from './Dropdown' 5 | import Pagination from './Pagination' 6 | import Progress from './Progress' 7 | import Switch from './Switch' 8 | import FgInput from './Inputs/formGroupInput' 9 | import Checkbox from './Inputs/Checkbox' 10 | import Radio from './Inputs/Radio' 11 | import StatsCard from './Cards/StatsCard' 12 | import InfoSection from './InfoSection' 13 | import Collapse from './Collapse/Collapse' 14 | import CollapseItem from './Collapse/CollapseItem' 15 | import Navbar from './Navbar/Navbar' 16 | import NavbarToggleButton from './Navbar/NavbarToggleButton' 17 | import Tabs from './Tabs/Tabs' 18 | import TabPane from './Tabs/Tab' 19 | import Modal from './Modal' 20 | 21 | import TimeLine from './TimeLine/TimeLine' 22 | import TimeLineItem from './TimeLine/TimeLineItem' 23 | import Wizard from './Wizard/Wizard' 24 | import WizardTab from './Wizard/WizardTab' 25 | import IconCheckbox from './Inputs/IconCheckbox' 26 | 27 | 28 | export { 29 | Card, 30 | Button, 31 | Badge, 32 | Dropdown, 33 | Pagination, 34 | Progress, 35 | Switch, 36 | FgInput, 37 | NavbarToggleButton, 38 | Navbar, 39 | Checkbox, 40 | Tabs, 41 | TabPane, 42 | Modal, 43 | Radio, 44 | StatsCard, 45 | Collapse, 46 | CollapseItem, 47 | InfoSection, 48 | TimeLine, 49 | TimeLineItem, 50 | Wizard, 51 | WizardTab, 52 | IconCheckbox 53 | } 54 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/globalComponents.js: -------------------------------------------------------------------------------- 1 | import {Radio, Checkbox, FgInput, Button, Dropdown, Card } from 'src/components/UIComponents'; 2 | import { ValidationProvider } from "vee-validate"; 3 | import { ValidationObserver } from "vee-validate"; 4 | /** 5 | * You can register global components here and use them as a plugin in your main Vue instance 6 | * Ideally, only small components that are re-used many times across your application should be registered here. 7 | * For plugins and bigger components local registration is preferable because it will allow you to do code splitting easier :) 8 | */ 9 | 10 | const GlobalComponents = { 11 | install (Vue) { 12 | Vue.component(FgInput.name, FgInput) 13 | Vue.component(Dropdown.name, Dropdown) 14 | Vue.component(Checkbox.name, Checkbox) 15 | Vue.component(Radio.name, Radio) 16 | Vue.component(Button.name, Button) 17 | Vue.component(Card.name, Card) 18 | // Vue.component(ValidationError) 19 | Vue.component("ValidationProvider", ValidationProvider); 20 | Vue.component("ValidationObserver", ValidationObserver); 21 | } 22 | } 23 | 24 | export default GlobalComponents 25 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/globalDirectives.js: -------------------------------------------------------------------------------- 1 | import {directive} from 'vue-clickaway' 2 | /** 3 | * You can register global directives here and use them as a plugin in your main Vue instance 4 | */ 5 | 6 | const GlobalDirectives = { 7 | install (Vue) { 8 | Vue.directive('click-outside', directive) 9 | } 10 | } 11 | 12 | export default GlobalDirectives 13 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/isDemo.js: -------------------------------------------------------------------------------- 1 | const isDemo = { 2 | install: (Vue) => { 3 | Vue.prototype.$isDemo = process.env.VUE_APP_IS_DEMO || 0; 4 | } 5 | } 6 | 7 | export default isDemo 8 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/middleware/auth.js: -------------------------------------------------------------------------------- 1 | import store from "../store"; 2 | 3 | export default function auth({ next, router }) { 4 | if (!store.getters.isAuthenticated) { 5 | return router.push({ name: "Login" }); 6 | } 7 | 8 | return next(); 9 | } 10 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/middleware/guest.js: -------------------------------------------------------------------------------- 1 | import store from "../store"; 2 | 3 | export default function guest({ next, router }) { 4 | if (store.getters.isAuthenticated) { 5 | return router.push({ path: "/" }); 6 | } 7 | 8 | return next(); 9 | } 10 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/mixins/form-mixin.js: -------------------------------------------------------------------------------- 1 | export default { 2 | data() { 3 | return { 4 | isLoading: false, 5 | apiValidationErrors: {} 6 | }; 7 | }, 8 | methods: { 9 | /* extract API server validation errors and assigns them to local mixin data */ 10 | setApiValidation(serverErrors, refs = null) { 11 | this.apiValidationErrors = serverErrors.reduce( 12 | (accumulator, errorObject) => { 13 | if(typeof errorObject.source === 'undefined') 14 | return false; 15 | 16 | const errorFieldName = errorObject.source.pointer.split('/')[3]; 17 | const errorDetail = (accumulator[errorFieldName] || []).concat(errorObject.detail); 18 | 19 | return { 20 | ...accumulator, 21 | [errorFieldName]: errorDetail 22 | }; 23 | }, 24 | {} 25 | ); 26 | }, 27 | 28 | resetApiValidation() { 29 | this.apiValidationErrors = {}; 30 | } 31 | } 32 | }; 33 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/pollyfills.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | export default (function initPollyFills() { 3 | if (!String.prototype.startsWith) { 4 | String.prototype.startsWith = function(searchString, position) { 5 | position = position || 0; 6 | return this.indexOf(searchString, position) === position; 7 | }; 8 | } 9 | if (!Array.prototype.find) { 10 | Object.defineProperty(Array.prototype, 'find', { 11 | value: function(predicate) { 12 | // 1. Let O be ? ToObject(this value). 13 | if (this == null) { 14 | throw new TypeError('"this" is null or not defined'); 15 | } 16 | 17 | var o = Object(this); 18 | 19 | // 2. Let len be ? ToLength(? Get(O, "length")). 20 | var len = o.length >>> 0; 21 | 22 | // 3. If IsCallable(predicate) is false, throw a TypeError exception. 23 | if (typeof predicate !== 'function') { 24 | throw new TypeError('predicate must be a function'); 25 | } 26 | 27 | // 4. If thisArg was supplied, let T be thisArg; else let T be undefined. 28 | var thisArg = arguments[1]; 29 | 30 | // 5. Let k be 0. 31 | var k = 0; 32 | 33 | // 6. Repeat, while k < len 34 | while (k < len) { 35 | // a. Let Pk be ! ToString(k). 36 | // b. Let kValue be ? Get(O, Pk). 37 | // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)). 38 | // d. If testResult is true, return kValue. 39 | var kValue = o[k]; 40 | if (predicate.call(thisArg, kValue, k, o)) { 41 | return kValue; 42 | } 43 | // e. Increase k by 1. 44 | k++; 45 | } 46 | 47 | // 7. Return undefined. 48 | return undefined; 49 | } 50 | }); 51 | } 52 | }()) 53 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/progressbar.js: -------------------------------------------------------------------------------- 1 | import NProgress from 'nprogress'; 2 | const progressShowDelay = 100; 3 | let routeResolved = false; 4 | /** 5 | * Initializes NProgress after a specified delay only if the route was not resolved yet. 6 | */ 7 | function tryInitProgress() { 8 | routeResolved = false; 9 | setTimeout(()=> { 10 | if (!routeResolved) { 11 | NProgress.start(); 12 | } 13 | }, progressShowDelay); 14 | } 15 | export default function initProgress(router) { 16 | router.beforeEach((to, from, next) => { 17 | tryInitProgress(); 18 | return next(); 19 | }); 20 | 21 | router.afterEach(() => { 22 | // Complete the animation of the route progress bar. 23 | routeResolved = true; 24 | NProgress.done(); 25 | }); 26 | } 27 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/registerServiceWorker.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable no-console */ 2 | 3 | import { register } from 'register-service-worker' 4 | 5 | if (process.env.NODE_ENV === 'production') { 6 | register(`${process.env.BASE_URL}service-worker.js`, { 7 | registrationOptions: { 8 | scope: process.env.BASE_URL, 9 | }, 10 | ready () { 11 | console.log( 12 | 'App is being served from cache by a service worker.\n' + 13 | 'For more details, visit https://goo.gl/AFskqB' 14 | ) 15 | }, 16 | registered () { 17 | console.log('Service worker has been registered.') 18 | }, 19 | cached () { 20 | console.log('Content has been cached for offline use.') 21 | }, 22 | updatefound () { 23 | console.log('New content is downloading.') 24 | }, 25 | updated () { 26 | console.log('New content is available; please refresh.') 27 | }, 28 | offline () { 29 | console.log('No internet connection found. App is running in offline mode.') 30 | }, 31 | error (error) { 32 | console.error('Error during service worker registration:', error) 33 | } 34 | }) 35 | } 36 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from "vue"; 2 | import VueRouter from "vue-router"; 3 | 4 | Vue.use(VueRouter); 5 | 6 | // router setup 7 | import routes from "./routes"; 8 | 9 | // configure router 10 | const router = new VueRouter({ 11 | mode: "history", 12 | routes, // short for routes: routes 13 | scrollBehavior: to => { 14 | if (to.hash) { 15 | return {selector: to.hash}; 16 | } else { 17 | return {x: 0, y: 0}; 18 | } 19 | }, 20 | linkExactActiveClass: "nav-item active" 21 | }); 22 | 23 | // Creates a `nextMiddleware()` function which not only 24 | // runs the default `next()` callback but also triggers 25 | // the subsequent Middleware function. 26 | function nextFactory(context, middleware, index) { 27 | const subsequentMiddleware = middleware[index]; 28 | // If no subsequent Middleware exists, 29 | // the default `next()` callback is returned. 30 | if (!subsequentMiddleware) 31 | return context.next; 32 | 33 | return (...parameters) => { 34 | // Run the default Vue Router `next()` callback first. 35 | context.next(...parameters); 36 | // Then run the subsequent Middleware with a new 37 | // `nextMiddleware()` callback. 38 | const nextMiddleware = nextFactory(context, middleware, index + 1); 39 | subsequentMiddleware({...context, next: nextMiddleware}); 40 | }; 41 | } 42 | 43 | router.beforeEach((to, from, next) => { 44 | 45 | if (to.meta.middleware) { 46 | const middleware = Array.isArray(to.meta.middleware) ? to.meta.middleware : [to.meta.middleware]; 47 | const context = {from, next, to, router}; 48 | const nextMiddleware = nextFactory(context, middleware, 1); 49 | 50 | return middleware[0]({...context, next: nextMiddleware}); 51 | } 52 | 53 | return next(); 54 | }); 55 | 56 | export default router; 57 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/store/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import Vuex from 'vuex'; 3 | 4 | import auth from "./modules/auth"; 5 | import alerts from "./modules/alerts-module"; 6 | import profile from "./modules/profile-module"; 7 | import users from "./modules/users-module"; 8 | import reset from "./modules/reset" 9 | 10 | Vue.use(Vuex); 11 | 12 | export default new Vuex.Store({ 13 | modules: { 14 | auth, 15 | alerts, 16 | profile, 17 | users, 18 | reset 19 | } 20 | }); 21 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/store/modules/alerts-module.js: -------------------------------------------------------------------------------- 1 | import Swal from "sweetalert2"; 2 | 3 | const state = {}; 4 | 5 | const mutations = {}; 6 | 7 | const actions = { 8 | success({commit, dispatch}, message) { 9 | this.$app.$notify({ 10 | timeout: 2500, 11 | message: message, 12 | horizontalAlign: "right", 13 | verticalAlign: "top", 14 | icon: "add_alert", 15 | type: "success" 16 | }); 17 | }, 18 | 19 | error({commit, dispatch}, message) { 20 | this.$app.$notify({ 21 | timeout: 2500, 22 | message: message, 23 | horizontalAlign: "right", 24 | verticalAlign: "top", 25 | icon: "add_alert", 26 | type: "warning" 27 | }); 28 | } 29 | }; 30 | 31 | const getters = {}; 32 | 33 | const alerts = { 34 | namespaced: true, 35 | state, 36 | getters, 37 | actions, 38 | mutations 39 | }; 40 | 41 | export default alerts; -------------------------------------------------------------------------------- /vue-paper-dashboard/src/store/modules/auth.js: -------------------------------------------------------------------------------- 1 | import Vue from "vue"; 2 | import router from "@/main"; 3 | import { VueAuthenticate } from "vue-authenticate"; 4 | 5 | import axios from "axios"; 6 | import VueAxios from "vue-axios"; 7 | Vue.use(VueAxios, axios); 8 | 9 | const vueAuth = new VueAuthenticate(Vue.prototype.$http, { 10 | baseUrl: process.env.VUE_APP_API_BASE_URL, 11 | tokenName: "access_token", 12 | loginUrl: "/login", 13 | registerUrl: "/register" 14 | }); 15 | 16 | export default { 17 | state: { 18 | isAuthenticated: localStorage.getItem("vue-authenticate.vueauth_access_token") !== null 19 | }, 20 | 21 | getters: { 22 | isAuthenticated(state) { 23 | return state.isAuthenticated; 24 | } 25 | }, 26 | 27 | mutations: { 28 | isAuthenticated(state, payload) { 29 | state.isAuthenticated = payload.isAuthenticated; 30 | } 31 | }, 32 | 33 | actions: { 34 | login(context, payload) { 35 | return vueAuth.login(payload.user, payload.requestOptions).then(response => { 36 | context.commit("isAuthenticated", { 37 | isAuthenticated: vueAuth.isAuthenticated() 38 | }); 39 | router.push({path: "/"}); 40 | }); 41 | }, 42 | 43 | register(context, payload) { 44 | return vueAuth.register(payload.user, payload.requestOptions).then(response => { 45 | context.commit("isAuthenticated", { 46 | isAuthenticated: vueAuth.isAuthenticated() 47 | }); 48 | router.push({path: "/"}); 49 | }); 50 | }, 51 | 52 | logout(context, payload) { 53 | return vueAuth.logout().then(response => { 54 | context.commit("isAuthenticated", { 55 | isAuthenticated: vueAuth.isAuthenticated() 56 | }); 57 | router.push({name: "Login"}); 58 | }); 59 | } 60 | } 61 | }; 62 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/store/modules/profile-module.js: -------------------------------------------------------------------------------- 1 | import service from '@/store/services/profile-service'; 2 | 3 | const state = { 4 | me: null, 5 | }; 6 | 7 | const mutations = { 8 | SET_RESOURCE: (state, me) => { 9 | state.me = me; 10 | } 11 | }; 12 | 13 | const actions = { 14 | me({commit, dispatch}, params) { 15 | return service.get(params) 16 | .then((profile) => { 17 | commit('SET_RESOURCE', profile.list); 18 | }); 19 | }, 20 | 21 | update({commit, dispatch}, params) { 22 | return service.update(params) 23 | .then((profile) => { 24 | commit('SET_RESOURCE', profile); 25 | }); 26 | }, 27 | }; 28 | 29 | const getters = { 30 | me: state => state.me 31 | }; 32 | 33 | const profile = { 34 | namespaced: true, 35 | state, 36 | getters, 37 | actions, 38 | mutations 39 | }; 40 | 41 | export default profile; 42 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/store/modules/reset.js: -------------------------------------------------------------------------------- 1 | import axios from "axios"; 2 | import store from "@/store"; 3 | const url = process.env.VUE_APP_API_BASE_URL; 4 | 5 | const actions = { 6 | async forgotPassword({ commit }, data) { 7 | await axios.post(`${url}/password-forgot`, { data }); 8 | }, 9 | async createNewPassword({ commit }, data) { 10 | await axios.post(`${url}/password-reset`, { data }); 11 | 12 | const user = { 13 | data: { 14 | type: "token", 15 | attributes: { 16 | email: data.attributes.email, 17 | password: data.attributes.password 18 | } 19 | } 20 | }; 21 | 22 | const requestOptions = { 23 | headers: { 24 | Accept: "application/vnd.api+json", 25 | "Content-Type": "application/vnd.api+json" 26 | } 27 | }; 28 | 29 | store.dispatch("login", { user, requestOptions }, { root: true }); 30 | } 31 | }; 32 | 33 | const reset = { 34 | namespaced: true, 35 | actions 36 | }; 37 | 38 | export default reset; 39 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/store/modules/users-module.js: -------------------------------------------------------------------------------- 1 | import service from '@/store/services/users-service'; 2 | 3 | const state = { 4 | list: {}, 5 | user: {}, 6 | meta: {}, 7 | url: null 8 | }; 9 | 10 | const mutations = { 11 | SET_LIST: (state, list) => { 12 | state.list = list; 13 | }, 14 | SET_RESOURCE: (state, user) => { 15 | state.user = user; 16 | }, 17 | SET_META: (state, meta) => { 18 | state.meta = meta; 19 | }, 20 | SET_URL: (state, url) => { 21 | state.url = url; 22 | } 23 | }; 24 | 25 | const actions = { 26 | list({commit, dispatch}, params) { 27 | return service.list(params) 28 | .then(({list, meta}) => { 29 | commit('SET_LIST', list); 30 | commit('SET_META', meta); 31 | }); 32 | }, 33 | 34 | get({commit, dispatch}, params) { 35 | return service.get(params) 36 | .then((user) => { commit('SET_RESOURCE', user); }); 37 | }, 38 | 39 | add({commit, dispatch}, params) { 40 | return service.add(params) 41 | .then((user) => { commit('SET_RESOURCE', user); }); 42 | }, 43 | 44 | update({commit, dispatch}, params) { 45 | return service.update(params) 46 | .then((user) => { commit('SET_RESOURCE', user); }); 47 | }, 48 | 49 | destroy({commit, dispatch}, params) { 50 | return service.destroy(params); 51 | }, 52 | 53 | upload({commit, dispatch}, {user, image}) { 54 | return service.upload(user, image) 55 | .then((url) => { 56 | commit('SET_URL', url); 57 | }); 58 | } 59 | }; 60 | 61 | const getters = { 62 | list: state => state.list, 63 | listTotal: state => state.meta.page.total, 64 | user: state => state.user, 65 | url: state => state.url 66 | }; 67 | 68 | const users = { 69 | namespaced: true, 70 | state, 71 | getters, 72 | actions, 73 | mutations 74 | }; 75 | 76 | export default users; 77 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/store/services/profile-service.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | import Jsona from 'jsona'; 3 | 4 | const url = process.env.VUE_APP_API_BASE_URL; 5 | const jsona = new Jsona(); 6 | 7 | function get() { 8 | return axios.get(`${url}/me`) 9 | .then(response => { 10 | return { 11 | list: jsona.deserialize(response.data), 12 | meta: response.data.meta 13 | }; 14 | }); 15 | } 16 | 17 | function update(profile) { 18 | 19 | const payload = jsona.serialize({ 20 | stuff: profile, 21 | includeNames: [] 22 | }); 23 | 24 | const options = { 25 | headers: { 26 | 'Accept': 'application/vnd.api+json', 27 | 'Content-Type': 'application/vnd.api+json', 28 | } 29 | }; 30 | 31 | return axios.patch(`${url}/me`, payload, options) 32 | .then(response => { 33 | return jsona.deserialize(response.data); 34 | }); 35 | } 36 | 37 | export default { 38 | get, 39 | update 40 | }; 41 | -------------------------------------------------------------------------------- /vue-paper-dashboard/src/util/throttle.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Simple throttle function that executes a passed function only once in the specified timeout 3 | * @param handlerFunc 4 | * @param [timeout] the throttle interval 5 | */ 6 | export function throttle(handlerFunc, timeout = 66) { 7 | let resizeTimeout; 8 | if (!resizeTimeout) { 9 | resizeTimeout = setTimeout(() => { 10 | resizeTimeout = null; 11 | handlerFunc(); 12 | // The actualResizeHandler will execute at a rate of 15fps 13 | }, timeout); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /vue-paper-dashboard/vue.config.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | const webpack = require('webpack'); 3 | function resolveSrc(_path) { 4 | return path.join(__dirname, _path) 5 | } 6 | module.exports = { 7 | configureWebpack: { 8 | // Set up all the aliases we use in our app. 9 | resolve: { 10 | alias: { 11 | 'src': resolveSrc('src'), 12 | 'chart.js': 'chart.js/dist/Chart.js' 13 | } 14 | }, 15 | plugins: [ 16 | new webpack.optimize.LimitChunkCountPlugin({ 17 | maxChunks: 6 18 | }) 19 | ] 20 | }, 21 | pwa: { 22 | name: 'Vue Paper Dashboard PRO', 23 | themeColor: '#66615B', 24 | msTileColor: '#66615B', 25 | appleMobileWebAppCapable: 'yes', 26 | appleMobileWebAppStatusBarStyle: '#66615B' 27 | }, 28 | css: { 29 | // Enable CSS source maps. 30 | sourceMap: process.env.NODE_ENV !== 'production' 31 | } 32 | }; 33 | --------------------------------------------------------------------------------