├── .babelrc ├── .editorconfig ├── .eslintignore ├── .eslintrc.js ├── .gitignore ├── LICENSE ├── README.md ├── build ├── css-utils.js ├── env-utils.js ├── hot-reload.js ├── script.build.js ├── script.clean.js ├── script.dev.js ├── webpack.base.conf.js ├── webpack.dev.conf.js └── webpack.prod.conf.js ├── config ├── dev.env.js ├── index.js └── prod.env.js ├── docs ├── docs-logo.png ├── icon-android.png └── icon-ios.png ├── package-lock.json ├── package.json ├── src ├── App.vue ├── assets │ └── quasar-logo.png ├── components │ ├── Auth.vue │ ├── AuthSuccess.vue │ ├── Error404.vue │ ├── layout │ │ ├── content-header.vue │ │ ├── drawer │ │ │ ├── drawer.vue │ │ │ ├── menuOne.vue │ │ │ └── menuTwo.vue │ │ ├── img │ │ │ ├── avatar-1.svg │ │ │ ├── quasar-logo.png │ │ │ └── vue-logo.png │ │ └── toolbar │ │ │ ├── messagePopover.vue │ │ │ └── toolbar.vue │ └── views │ │ ├── dashboard │ │ └── one │ │ │ ├── cardChart.vue │ │ │ ├── cardTodo.vue │ │ │ ├── cardTotal.vue │ │ │ ├── dashboard.vue │ │ │ ├── knobStatistics.vue │ │ │ └── tagKnob.vue │ │ ├── dragAndDrop │ │ ├── dragAndDrop.vue │ │ ├── exampleTwo │ │ │ ├── cardExampleTwo.vue │ │ │ ├── cardTask.vue │ │ │ ├── doingColumn.vue │ │ │ ├── doneColumn.vue │ │ │ └── todoColumn.vue │ │ └── exempleOne │ │ │ ├── cardExampleOne.vue │ │ │ └── img │ │ │ ├── apple.svg │ │ │ ├── cart.svg │ │ │ ├── orange.svg │ │ │ ├── pear.svg │ │ │ ├── strawberry.svg │ │ │ └── watermelon.svg │ │ ├── form │ │ ├── advancedFormOne │ │ │ ├── advancedFormOne.vue │ │ │ ├── cardDataTable.vue │ │ │ └── cardUserData.vue │ │ ├── embeeded │ │ │ ├── eDateTime.vue │ │ │ ├── eInput.vue │ │ │ ├── eSelect.vue │ │ │ └── embeeded.vue │ │ └── simpleForm │ │ │ ├── modalAdress.vue │ │ │ ├── simpleForm.vue │ │ │ └── userForm.vue │ │ ├── login │ │ ├── login-one.vue │ │ └── logoData.js │ │ ├── pricing │ │ ├── cardPlanOne.vue │ │ ├── cardPlanTwo.vue │ │ ├── plansBenefits │ │ │ ├── benefitFour.vue │ │ │ ├── benefitOne.vue │ │ │ ├── benefitThree.vue │ │ │ └── benefitTwo.vue │ │ └── pricing.vue │ │ └── serverSideDataTable │ │ ├── serverSideDataTable.vue │ │ └── tooltipButton.vue ├── configs │ ├── axios.js │ ├── router.js │ └── store.js ├── helpers │ └── firebaseConfig.js ├── index.html ├── main.js ├── statics │ ├── devices-sprite.jpg │ ├── favicon.ico │ └── firebaseui.css └── themes │ ├── app.ios.styl │ ├── app.mat.styl │ └── app.variables.styl ├── templates ├── component.vue ├── layout.vue └── view.vue └── tests └── exampl.test.js /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [["es2015", {"modules": false}], "stage-2"], 3 | "plugins": ["transform-runtime"], 4 | "comments": false 5 | } 6 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | build/*.js 2 | config/*.js 3 | dist/*.js 4 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | parserOptions: { 4 | sourceType: 'module' 5 | }, 6 | env: { 7 | browser: true 8 | }, 9 | globals: { 10 | 'cordova': true, 11 | 'Velocity': true, 12 | 'DEV': true, 13 | 'PROD': true, 14 | '__THEME': true 15 | }, 16 | // https://github.com/feross/standard/blob/master/RULES.md#javascript-standard-style 17 | extends: 'standard', 18 | // required to lint *.vue files 19 | plugins: [ 20 | 'html' 21 | ], 22 | // add your custom rules here 23 | 'rules': { 24 | // allow paren-less arrow functions 25 | 'arrow-parens': 0, 26 | 'one-var': 0, 27 | // allow debugger during development 28 | 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0, 29 | 'brace-style': [2, 'stroustrup', { 'allowSingleLine': true }] 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | dist/ 4 | npm-debug.log 5 | npm-debug.log.* 6 | selenium-debug.log 7 | test/unit/coverage 8 | test/e2e/reports 9 | cordova/platforms 10 | cordova/plugins 11 | thumbs.db 12 | !.gitkeep 13 | .firebaserc 14 | database.rules.json 15 | firebase.json 16 | public/ 17 | yarn-error.log 18 | yarn.lock 19 | .idea 20 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 Razvan Stoenescu 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 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 |  3 | 4 | > Some examples how powerful Quasar / Vuejs is for SPA projects. 5 | 6 | ## Links 7 | * [Vuejs Page](https://vuejs.org/) 8 | * [Quasar Framework Page](http://quasar-framework.org/) 9 | 10 | ## Demo (Android or IOS Style) 11 | [](https://quasar-admin.firebaseapp.com/android/#/) 12 | [](https://quasar-admin.firebaseapp.com/ios/#/) 13 | 14 | ## Infos 15 | * Using Quasar default template 16 | * Using [Jsonplaceholder](https://jsonplaceholder.typicode.com/) as backend API 17 | * Using [Flaticon](http://www.flaticon.com) for SVG's 18 | * Using [Adorable Avatars](http://avatars.adorable.io/) for cool avatars 19 | 20 | 21 | ## Dependecies 22 | * [Axios.js](https://github.com/mzabriskie/axios) as HTTP client / Config from [CodeCasts](https://github.com/codecasts/spa-starter-kit/blob/develop/client/src/plugins/http/index.js) 23 | * [Chart.js](http://www.chartjs.org) as Chart render 24 | * [CountUp.js](https://inorganik.github.io/countUp.js/) as number counter animation 25 | * [Gmaps.js](https://hpneo.github.io/gmaps/) as map Api / data 26 | * [Vivus.js](https://maxwellito.github.io/vivus/) as SVG animator 27 | * [Vuelidate.js](https://monterail.github.io/vuelidate/) for form validations 28 | * [Dragula.js](https://github.com/bevacqua/dragula) for drag and drop 29 | 30 | -------------------------------------------------------------------------------- /build/css-utils.js: -------------------------------------------------------------------------------- 1 | var 2 | ExtractTextPlugin = require('extract-text-webpack-plugin'), 3 | autoprefixer = require('autoprefixer') 4 | 5 | module.exports.postcss = [autoprefixer()] 6 | 7 | module.exports.styleLoaders = function (options) { 8 | options = options || {} 9 | 10 | function generateLoaders (loaders) { 11 | if (options.postcss) { 12 | loaders.splice(1, 0, 'postcss') 13 | } 14 | 15 | var sourceLoader = loaders.map(function (loader) { 16 | var extraParamChar 17 | if (/\?/.test(loader)) { 18 | loader = loader.replace(/\?/, '-loader?') 19 | extraParamChar = '&' 20 | } 21 | else { 22 | loader = loader + '-loader' 23 | extraParamChar = '?' 24 | } 25 | return loader + (options.sourceMap ? extraParamChar + 'sourceMap' : '') 26 | }).join('!') 27 | 28 | if (options.extract) { 29 | return ExtractTextPlugin.extract({ 30 | use: sourceLoader, 31 | fallback: 'vue-style-loader' 32 | }) 33 | } 34 | else { 35 | return ['vue-style-loader', sourceLoader].join('!') 36 | } 37 | } 38 | 39 | return { 40 | css: generateLoaders(['css']), 41 | less: generateLoaders(['css', 'less']), 42 | sass: generateLoaders(['css', 'sass?indentedSyntax']), 43 | scss: generateLoaders(['css', 'sass']), 44 | styl: generateLoaders(['css', 'stylus']), 45 | stylus: generateLoaders(['css', 'stylus']) 46 | } 47 | } 48 | 49 | module.exports.styleRules = function (options) { 50 | var output = [] 51 | var loaders = exports.styleLoaders(options) 52 | for (var extension in loaders) { 53 | var loader = loaders[extension] 54 | output.push({ 55 | test: new RegExp('\\.' + extension + '$'), 56 | loader: loader 57 | }) 58 | } 59 | return output 60 | } 61 | -------------------------------------------------------------------------------- /build/env-utils.js: -------------------------------------------------------------------------------- 1 | var 2 | config = require('../config'), 3 | theme = process.argv[2] || config.defaultTheme 4 | 5 | module.exports = { 6 | dev: process.env.NODE_ENV === 'development', 7 | prod: process.env.NODE_ENV === 'production', 8 | 9 | platform: { 10 | theme: theme, 11 | cordovaAssets: './cordova/platforms/' + (theme === 'mat' ? 'android' : 'ios') + '/platform_www' 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /build/hot-reload.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | require('eventsource-polyfill') 3 | var hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true') 4 | 5 | hotClient.subscribe(function (event) { 6 | if (event.action === 'reload') { 7 | window.location.reload() 8 | } 9 | }) 10 | -------------------------------------------------------------------------------- /build/script.build.js: -------------------------------------------------------------------------------- 1 | process.env.NODE_ENV = 'production' 2 | 3 | require('colors') 4 | 5 | var 6 | shell = require('shelljs'), 7 | path = require('path'), 8 | env = require('./env-utils'), 9 | webpack = require('webpack'), 10 | webpackConfig = require('./webpack.prod.conf.js'), 11 | targetPath = path.join(__dirname, '../dist') 12 | 13 | console.log(' WARNING!'.bold) 14 | console.log(' Do NOT use VueRouter\'s "history" mode if') 15 | console.log(' building for Cordova or Electron.\n') 16 | 17 | require('./script.clean.js') 18 | console.log((' Building Quasar App with "' + env.platform.theme + '" theme...\n').bold) 19 | 20 | shell.mkdir('-p', targetPath) 21 | shell.cp('-R', 'src/statics', targetPath) 22 | 23 | webpack(webpackConfig, function (err, stats) { 24 | if (err) throw err 25 | process.stdout.write(stats.toString({ 26 | colors: true, 27 | modules: false, 28 | children: false, 29 | chunks: false, 30 | chunkModules: false 31 | }) + '\n') 32 | 33 | console.log(( 34 | '\n Build complete with "' + env.platform.theme.bold + '" theme in ' + 35 | '"/dist"'.bold + ' folder.\n').cyan) 36 | 37 | console.log(' Built files are meant to be served over an HTTP server.'.bold) 38 | console.log(' Opening index.html over file:// won\'t work.'.bold) 39 | }) 40 | -------------------------------------------------------------------------------- /build/script.clean.js: -------------------------------------------------------------------------------- 1 | var 2 | shell = require('shelljs'), 3 | path = require('path') 4 | 5 | shell.rm('-rf', path.resolve(__dirname, '../dist')) 6 | console.log(' Cleaned build artifacts.\n') 7 | -------------------------------------------------------------------------------- /build/script.dev.js: -------------------------------------------------------------------------------- 1 | process.env.NODE_ENV = 'development' 2 | 3 | require('colors') 4 | 5 | var 6 | path = require('path'), 7 | express = require('express'), 8 | webpack = require('webpack'), 9 | env = require('./env-utils'), 10 | config = require('../config'), 11 | opn = require('opn'), 12 | proxyMiddleware = require('http-proxy-middleware'), 13 | webpackConfig = require('./webpack.dev.conf.js'), 14 | app = express(), 15 | port = process.env.PORT || config.dev.port, 16 | uri = 'http://localhost:' + port 17 | 18 | console.log(' Starting dev server with "' + (process.argv[2] || env.platform.theme).bold + '" theme...') 19 | console.log(' Will listen at ' + uri.bold) 20 | if (config.dev.openBrowser) { 21 | console.log(' Browser will open when build is ready.\n') 22 | } 23 | 24 | var compiler = webpack(webpackConfig) 25 | 26 | // Define HTTP proxies to your custom API backend 27 | // https://github.com/chimurai/http-proxy-middleware 28 | var proxyTable = config.dev.proxyTable 29 | 30 | var devMiddleware = require('webpack-dev-middleware')(compiler, { 31 | publicPath: webpackConfig.output.publicPath, 32 | quiet: true 33 | }) 34 | 35 | var hotMiddleware = require('webpack-hot-middleware')(compiler, { 36 | log: function () {} 37 | }) 38 | 39 | // force page reload when html-webpack-plugin template changes 40 | compiler.plugin('compilation', function (compilation) { 41 | compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) { 42 | hotMiddleware.publish({ action: 'reload' }) 43 | cb() 44 | }) 45 | }) 46 | 47 | // proxy requests like API. See /config/index.js -> dev.proxyTable 48 | // https://github.com/chimurai/http-proxy-middleware 49 | Object.keys(proxyTable).forEach(function (context) { 50 | var options = proxyTable[context] 51 | if (typeof options === 'string') { 52 | options = { target: options } 53 | } 54 | app.use(proxyMiddleware(context, options)) 55 | }) 56 | 57 | // handle fallback for HTML5 history API 58 | app.use(require('connect-history-api-fallback')()) 59 | 60 | // serve webpack bundle output 61 | app.use(devMiddleware) 62 | 63 | // enable hot-reload and state-preserving 64 | // compilation error display 65 | app.use(hotMiddleware) 66 | 67 | // serve pure static assets 68 | var staticsPath = path.posix.join(webpackConfig.output.publicPath, 'statics/') 69 | app.use(staticsPath, express.static('./src/statics')) 70 | 71 | // try to serve Cordova statics for Play App 72 | app.use(express.static(env.platform.cordovaAssets)) 73 | 74 | module.exports = app.listen(port, function (err) { 75 | if (err) { 76 | console.log(err) 77 | return 78 | } 79 | 80 | // open browser if set so in /config/index.js 81 | if (config.dev.openBrowser) { 82 | devMiddleware.waitUntilValid(function () { 83 | opn(uri) 84 | }) 85 | } 86 | }) 87 | -------------------------------------------------------------------------------- /build/webpack.base.conf.js: -------------------------------------------------------------------------------- 1 | var 2 | path = require('path'), 3 | webpack = require('webpack'), 4 | config = require('../config'), 5 | cssUtils = require('./css-utils'), 6 | env = require('./env-utils'), 7 | merge = require('webpack-merge'), 8 | projectRoot = path.resolve(__dirname, '../'), 9 | ProgressBarPlugin = require('progress-bar-webpack-plugin'), 10 | useCssSourceMap = 11 | (env.dev && config.dev.cssSourceMap) || 12 | (env.prod && config.build.productionSourceMap) 13 | 14 | function resolve (dir) { 15 | return path.join(__dirname, '..', dir) 16 | } 17 | 18 | module.exports = { 19 | entry: { 20 | app: './src/main.js' 21 | }, 22 | output: { 23 | path: path.resolve(__dirname, '../dist'), 24 | publicPath: config[env.prod ? 'build' : 'dev'].publicPath, 25 | filename: 'js/[name].js', 26 | chunkFilename: 'js/[id].[chunkhash].js' 27 | }, 28 | resolve: { 29 | extensions: ['.js', '.vue', '.json'], 30 | modules: [ 31 | resolve('src'), 32 | resolve('node_modules') 33 | ], 34 | alias: config.aliases 35 | }, 36 | module: { 37 | rules: [ 38 | { // eslint 39 | enforce: 'pre', 40 | test: /\.(vue|js)$/, 41 | loader: 'eslint-loader', 42 | include: projectRoot, 43 | exclude: /node_modules/, 44 | options: { 45 | formatter: require('eslint-friendly-formatter') 46 | } 47 | }, 48 | { 49 | test: /\.js$/, 50 | loader: 'babel-loader', 51 | include: projectRoot, 52 | exclude: /node_modules/ 53 | }, 54 | { 55 | test: /\.vue$/, 56 | loader: 'vue-loader', 57 | options: { 58 | postcss: cssUtils.postcss, 59 | loaders: merge({js: 'babel-loader'}, cssUtils.styleLoaders({ 60 | sourceMap: useCssSourceMap, 61 | extract: env.prod 62 | })) 63 | } 64 | }, 65 | { 66 | test: /\.json$/, 67 | loader: 'json-loader' 68 | }, 69 | { 70 | test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, 71 | loader: 'url-loader', 72 | options: { 73 | limit: 10000, 74 | name: 'img/[name].[hash:7].[ext]' 75 | } 76 | }, 77 | { 78 | test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, 79 | loader: 'url-loader', 80 | options: { 81 | limit: 10000, 82 | name: 'fonts/[name].[hash:7].[ext]' 83 | } 84 | } 85 | ] 86 | }, 87 | plugins: [ 88 | /* Uncomment if you wish to load only one Moment locale: */ 89 | // new webpack.ContextReplacementPlugin(/moment[\/\\]locale$/, /en/), 90 | 91 | new webpack.DefinePlugin({ 92 | 'process.env': config[env.prod ? 'build' : 'dev'].env, 93 | 'DEV': env.dev, 94 | 'PROD': env.prod, 95 | '__THEME': '"' + env.platform.theme + '"' 96 | }), 97 | new webpack.LoaderOptionsPlugin({ 98 | minimize: env.prod, 99 | options: { 100 | context: path.resolve(__dirname, '../src'), 101 | postcss: cssUtils.postcss 102 | } 103 | }), 104 | new ProgressBarPlugin({ 105 | format: config.progressFormat 106 | }) 107 | ], 108 | performance: { 109 | hints: false 110 | } 111 | } 112 | -------------------------------------------------------------------------------- /build/webpack.dev.conf.js: -------------------------------------------------------------------------------- 1 | var 2 | config = require('../config'), 3 | webpack = require('webpack'), 4 | merge = require('webpack-merge'), 5 | cssUtils = require('./css-utils'), 6 | baseWebpackConfig = require('./webpack.base.conf.js'), 7 | HtmlWebpackPlugin = require('html-webpack-plugin'), 8 | FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin') 9 | 10 | // add hot-reload related code to entry chunks 11 | Object.keys(baseWebpackConfig.entry).forEach(function (name) { 12 | baseWebpackConfig.entry[name] = ['./build/hot-reload'].concat(baseWebpackConfig.entry[name]) 13 | }) 14 | 15 | module.exports = merge(baseWebpackConfig, { 16 | // eval-source-map is faster for development 17 | devtool: '#cheap-module-eval-source-map', 18 | devServer: { 19 | historyApiFallback: true, 20 | noInfo: true 21 | }, 22 | module: { 23 | rules: cssUtils.styleRules({ 24 | sourceMap: config.dev.cssSourceMap, 25 | postcss: true 26 | }) 27 | }, 28 | plugins: [ 29 | new webpack.HotModuleReplacementPlugin(), 30 | new webpack.NoEmitOnErrorsPlugin(), 31 | new HtmlWebpackPlugin({ 32 | filename: 'index.html', 33 | template: 'src/index.html', 34 | inject: true 35 | }), 36 | new FriendlyErrorsPlugin({ 37 | clearConsole: config.dev.clearConsoleOnRebuild 38 | }) 39 | ], 40 | performance: { 41 | hints: false 42 | } 43 | }) 44 | -------------------------------------------------------------------------------- /build/webpack.prod.conf.js: -------------------------------------------------------------------------------- 1 | var 2 | path = require('path'), 3 | config = require('../config'), 4 | cssUtils = require('./css-utils'), 5 | webpack = require('webpack'), 6 | merge = require('webpack-merge'), 7 | baseWebpackConfig = require('./webpack.base.conf.js'), 8 | ExtractTextPlugin = require('extract-text-webpack-plugin'), 9 | HtmlWebpackPlugin = require('html-webpack-plugin') 10 | 11 | var webpackConfig = merge(baseWebpackConfig, { 12 | module: { 13 | rules: cssUtils.styleRules({ 14 | sourceMap: config.build.productionSourceMap, 15 | extract: true, 16 | postcss: true 17 | }) 18 | }, 19 | devtool: config.build.productionSourceMap ? '#source-map' : false, 20 | plugins: [ 21 | new webpack.optimize.UglifyJsPlugin({ 22 | sourceMap: config.build.productionSourceMap, 23 | minimize: true, 24 | compress: { 25 | warnings: false 26 | } 27 | }), 28 | // extract css into its own file 29 | new ExtractTextPlugin({ 30 | filename: '[name].[contenthash].css' 31 | }), 32 | new HtmlWebpackPlugin({ 33 | filename: config.build.index, 34 | template: 'src/index.html', 35 | inject: true, 36 | minify: { 37 | removeComments: true, 38 | collapseWhitespace: true, 39 | removeAttributeQuotes: true 40 | // more options: 41 | // https://github.com/kangax/html-minifier#options-quick-reference 42 | }, 43 | // necessary to consistently work with multiple chunks via CommonsChunkPlugin 44 | chunksSortMode: 'dependency' 45 | }), 46 | // split vendor js into its own file 47 | new webpack.optimize.CommonsChunkPlugin({ 48 | name: 'vendor', 49 | minChunks: function (module, count) { 50 | // any required modules inside node_modules are extracted to vendor 51 | return ( 52 | module.resource && 53 | /\.js$/.test(module.resource) && 54 | module.resource.indexOf( 55 | path.join(__dirname, '../node_modules') 56 | ) === 0 57 | ) 58 | } 59 | }), 60 | // extract webpack runtime and module manifest to its own file in order to 61 | // prevent vendor hash from being updated whenever app bundle is updated 62 | new webpack.optimize.CommonsChunkPlugin({ 63 | name: 'manifest', 64 | chunks: ['vendor'] 65 | }) 66 | ] 67 | }) 68 | 69 | if (config.build.productionGzip) { 70 | var CompressionWebpackPlugin = require('compression-webpack-plugin') 71 | 72 | webpackConfig.plugins.push( 73 | new CompressionWebpackPlugin({ 74 | asset: '[path].gz[query]', 75 | algorithm: 'gzip', 76 | test: new RegExp( 77 | '\\.(' + 78 | config.build.productionGzipExtensions.join('|') + 79 | ')$' 80 | ), 81 | threshold: 10240, 82 | minRatio: 0.8 83 | }) 84 | ) 85 | } 86 | 87 | module.exports = webpackConfig 88 | -------------------------------------------------------------------------------- /config/dev.env.js: -------------------------------------------------------------------------------- 1 | var merge = require('webpack-merge') 2 | var prodEnv = require('./prod.env.js') 3 | 4 | module.exports = merge(prodEnv, { 5 | NODE_ENV: '"development"' 6 | }) 7 | -------------------------------------------------------------------------------- /config/index.js: -------------------------------------------------------------------------------- 1 | var path = require('path') 2 | 3 | module.exports = { 4 | // Webpack aliases 5 | aliases: { 6 | quasar: path.resolve(__dirname, '../node_modules/quasar-framework/'), 7 | src: path.resolve(__dirname, '../src'), 8 | assets: path.resolve(__dirname, '../src/assets'), 9 | components: path.resolve(__dirname, '../src/components') 10 | }, 11 | 12 | // Progress Bar Webpack plugin format 13 | // https://github.com/clessg/progress-bar-webpack-plugin#options 14 | progressFormat: ' [:bar] ' + ':percent'.bold + ' (:msg)', 15 | 16 | // Default theme to build with ('ios' or 'mat') 17 | defaultTheme: 'mat', 18 | 19 | build: { 20 | env: require('./prod.env.js'), 21 | index: path.resolve(__dirname, '../dist/index.html'), 22 | publicPath: '', 23 | productionSourceMap: false, 24 | // Gzip off by default as many popular static hosts such as 25 | // Surge or Netlify already gzip all static assets for you. 26 | // Before setting to `true`, make sure to: 27 | // npm install --save-dev compression-webpack-plugin 28 | productionGzip: false, 29 | productionGzipExtensions: ['js', 'css'] 30 | }, 31 | dev: { 32 | env: require('./dev.env.js'), 33 | cssSourceMap: true, 34 | // auto open browser or not 35 | openBrowser: true, 36 | publicPath: '/', 37 | port: 8080, 38 | 39 | // If for example you are using Quasar Play 40 | // to generate a QR code then on each dev (re)compilation 41 | // you need to avoid clearing out the console, so set this 42 | // to "false", otherwise you can set it to "true" to always 43 | // have only the messages regarding your last (re)compilation. 44 | clearConsoleOnRebuild: false, 45 | 46 | // Proxy your API if using any. 47 | // Also see /build/script.dev.js and search for "proxy api requests" 48 | // https://github.com/chimurai/http-proxy-middleware 49 | proxyTable: {} 50 | } 51 | } 52 | 53 | /* 54 | * proxyTable example: 55 | * 56 | proxyTable: { 57 | // proxy all requests starting with /api 58 | '/api': { 59 | target: 'https://some.address.com/api', 60 | changeOrigin: true, 61 | pathRewrite: { 62 | '^/api': '' 63 | } 64 | } 65 | } 66 | */ 67 | -------------------------------------------------------------------------------- /config/prod.env.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | NODE_ENV: '"production"' 3 | } 4 | -------------------------------------------------------------------------------- /docs/docs-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/odranoelBR/vue-quasar-admin-example/8ae8fadcc56cbeccbac1aa66fed12709f2a2ac92/docs/docs-logo.png -------------------------------------------------------------------------------- /docs/icon-android.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/odranoelBR/vue-quasar-admin-example/8ae8fadcc56cbeccbac1aa66fed12709f2a2ac92/docs/icon-android.png -------------------------------------------------------------------------------- /docs/icon-ios.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/odranoelBR/vue-quasar-admin-example/8ae8fadcc56cbeccbac1aa66fed12709f2a2ac92/docs/icon-ios.png -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "quasar-app", 3 | "version": "0.0.1", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "autoprefixer": { 8 | "version": "6.7.7", 9 | "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", 10 | "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", 11 | "dev": true 12 | }, 13 | "axios": { 14 | "version": "0.21.2", 15 | "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.2.tgz", 16 | "integrity": "sha512-87otirqUw3e8CzHTMO+/9kh/FSgXt/eVDvipijwDtEuwbkySWZ9SBm6VEubmJ/kLKEoLQV/POhxXFb66bfekfg==", 17 | "requires": { 18 | "follow-redirects": "^1.14.0" 19 | } 20 | }, 21 | "babel-core": { 22 | "version": "6.25.0", 23 | "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.25.0.tgz", 24 | "integrity": "sha1-fdQrBGPHQunVKW3rPsZ6kyLa1yk=", 25 | "dev": true 26 | }, 27 | "babel-eslint": { 28 | "version": "7.2.3", 29 | "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-7.2.3.tgz", 30 | "integrity": "sha1-sv4tgBJkcPXBlELcdXJTqJdxCCc=", 31 | "dev": true 32 | }, 33 | "babel-loader": { 34 | "version": "6.4.1", 35 | "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-6.4.1.tgz", 36 | "integrity": "sha1-CzQRLVsHSKjc2/Uaz2+b1C1QuMo=", 37 | "dev": true 38 | }, 39 | "babel-plugin-transform-runtime": { 40 | "version": "6.23.0", 41 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz", 42 | "integrity": "sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=", 43 | "dev": true 44 | }, 45 | "babel-preset-es2015": { 46 | "version": "6.24.1", 47 | "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", 48 | "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", 49 | "dev": true 50 | }, 51 | "babel-preset-stage-2": { 52 | "version": "6.24.1", 53 | "resolved": "https://registry.npmjs.org/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz", 54 | "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=", 55 | "dev": true 56 | }, 57 | "babel-runtime": { 58 | "version": "6.23.0", 59 | "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.23.0.tgz", 60 | "integrity": "sha1-CpSJ8UTecO+zzkMArM2zKeL8VDs=" 61 | }, 62 | "balanced-match": { 63 | "version": "1.0.2", 64 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 65 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 66 | "dev": true 67 | }, 68 | "brace-expansion": { 69 | "version": "1.1.11", 70 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 71 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 72 | "dev": true, 73 | "requires": { 74 | "balanced-match": "^1.0.0", 75 | "concat-map": "0.0.1" 76 | } 77 | }, 78 | "chart.js": { 79 | "version": "2.9.4", 80 | "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.9.4.tgz", 81 | "integrity": "sha512-B07aAzxcrikjAPyV+01j7BmOpxtQETxTSlQ26BEYJ+3iUkbNKaOJ/nDbT6JjyqYxseM0ON12COHYdU2cTIjC7A==", 82 | "requires": { 83 | "chartjs-color": "^2.1.0", 84 | "moment": "^2.10.2" 85 | } 86 | }, 87 | "chartjs-color": { 88 | "version": "2.4.1", 89 | "resolved": "https://registry.npmjs.org/chartjs-color/-/chartjs-color-2.4.1.tgz", 90 | "integrity": "sha512-haqOg1+Yebys/Ts/9bLo/BqUcONQOdr/hoEr2LLTRl6C5LXctUdHxsCYfvQVg5JIxITrfCNUDr4ntqmQk9+/0w==", 91 | "requires": { 92 | "chartjs-color-string": "^0.6.0", 93 | "color-convert": "^1.9.3" 94 | } 95 | }, 96 | "chartjs-color-string": { 97 | "version": "0.6.0", 98 | "resolved": "https://registry.npmjs.org/chartjs-color-string/-/chartjs-color-string-0.6.0.tgz", 99 | "integrity": "sha512-TIB5OKn1hPJvO7JcteW4WY/63v6KwEdt6udfnDE9iCAZgy+V4SrbSxoIbTw/xkUIapjEI4ExGtD0+6D3KyFd7A==", 100 | "requires": { 101 | "color-name": "^1.0.0" 102 | } 103 | }, 104 | "color-convert": { 105 | "version": "1.9.3", 106 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 107 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 108 | "requires": { 109 | "color-name": "1.1.3" 110 | }, 111 | "dependencies": { 112 | "color-name": { 113 | "version": "1.1.3", 114 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 115 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" 116 | } 117 | } 118 | }, 119 | "color-name": { 120 | "version": "1.1.4", 121 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 122 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 123 | }, 124 | "colors": { 125 | "version": "1.1.2", 126 | "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", 127 | "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", 128 | "dev": true 129 | }, 130 | "concat-map": { 131 | "version": "0.0.1", 132 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 133 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 134 | "dev": true 135 | }, 136 | "connect-history-api-fallback": { 137 | "version": "1.3.0", 138 | "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.3.0.tgz", 139 | "integrity": "sha1-5R0X+PDvDbkKZP20feMFFVbp8Wk=", 140 | "dev": true 141 | }, 142 | "countup.js": { 143 | "version": "1.8.5", 144 | "resolved": "https://registry.npmjs.org/countup.js/-/countup.js-1.8.5.tgz", 145 | "integrity": "sha1-CUH2LGBYNcYBR4tF6MCWsW1+mIE=" 146 | }, 147 | "css-loader": { 148 | "version": "0.26.4", 149 | "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.26.4.tgz", 150 | "integrity": "sha1-th6eMNuUMD5v/IkvEOzQmtAlof0=", 151 | "dev": true, 152 | "dependencies": { 153 | "loader-utils": { 154 | "version": "1.1.0", 155 | "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", 156 | "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=" 157 | } 158 | } 159 | }, 160 | "dragula": { 161 | "version": "3.7.2", 162 | "resolved": "https://registry.npmjs.org/dragula/-/dragula-3.7.2.tgz", 163 | "integrity": "sha1-SjXJ05gf+sGpScKcpyhQWOhzk84=" 164 | }, 165 | "eslint": { 166 | "version": "3.19.0", 167 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz", 168 | "integrity": "sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=", 169 | "dev": true 170 | }, 171 | "eslint-config-standard": { 172 | "version": "6.2.1", 173 | "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-6.2.1.tgz", 174 | "integrity": "sha1-06aKr8cZFjnn7kQec0hzkCY1QpI=", 175 | "dev": true 176 | }, 177 | "eslint-friendly-formatter": { 178 | "version": "2.0.7", 179 | "resolved": "https://registry.npmjs.org/eslint-friendly-formatter/-/eslint-friendly-formatter-2.0.7.tgz", 180 | "integrity": "sha1-ZX+VoZr0mJY2r+uxzJ3mzrvQiO4=", 181 | "dev": true, 182 | "dependencies": { 183 | "minimist": { 184 | "version": "1.2.0", 185 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 186 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" 187 | } 188 | } 189 | }, 190 | "eslint-loader": { 191 | "version": "1.8.0", 192 | "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-1.8.0.tgz", 193 | "integrity": "sha512-+d9me9y9t+/k1pY5hsorY685H3yYoQT0t5pZT1TGB7L46VOoLv8+3uKHvkjpUx1aCTjeacbj4yz4s5/LcGolpg==", 194 | "dev": true, 195 | "dependencies": { 196 | "loader-utils": { 197 | "version": "1.1.0", 198 | "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", 199 | "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=" 200 | } 201 | } 202 | }, 203 | "eslint-plugin-html": { 204 | "version": "2.0.3", 205 | "resolved": "https://registry.npmjs.org/eslint-plugin-html/-/eslint-plugin-html-2.0.3.tgz", 206 | "integrity": "sha1-fImIOrDIX6XSi2ZqFKTpBqqQuJc=", 207 | "dev": true 208 | }, 209 | "eslint-plugin-promise": { 210 | "version": "3.5.0", 211 | "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.5.0.tgz", 212 | "integrity": "sha1-ePu2/+BHIBYnVp6FpsU3OvKmj8o=", 213 | "dev": true 214 | }, 215 | "eslint-plugin-standard": { 216 | "version": "2.3.1", 217 | "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-2.3.1.tgz", 218 | "integrity": "sha1-Z2W9Km2ezce98bFFrkuzDit7hvg=", 219 | "dev": true 220 | }, 221 | "eventsource-polyfill": { 222 | "version": "0.9.6", 223 | "resolved": "https://registry.npmjs.org/eventsource-polyfill/-/eventsource-polyfill-0.9.6.tgz", 224 | "integrity": "sha1-EODRh/ERsWfyj9q5GIQ859gY8Tw=", 225 | "dev": true 226 | }, 227 | "express": { 228 | "version": "4.15.3", 229 | "resolved": "https://registry.npmjs.org/express/-/express-4.15.3.tgz", 230 | "integrity": "sha1-urZdDwOqgMNYQIly/HAPkWlEtmI=", 231 | "dev": true, 232 | "dependencies": { 233 | "debug": { 234 | "version": "2.6.7", 235 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", 236 | "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=" 237 | } 238 | } 239 | }, 240 | "extract-text-webpack-plugin": { 241 | "version": "2.1.2", 242 | "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-2.1.2.tgz", 243 | "integrity": "sha1-dW7076gVXDaBgz+8NNpTuUF0bWw=", 244 | "dev": true, 245 | "dependencies": { 246 | "loader-utils": { 247 | "version": "1.1.0", 248 | "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", 249 | "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=" 250 | } 251 | } 252 | }, 253 | "fastclick": { 254 | "version": "1.0.6", 255 | "resolved": "https://registry.npmjs.org/fastclick/-/fastclick-1.0.6.tgz", 256 | "integrity": "sha1-FhYlsnsaWAZAWTa9qaLBkm0Gvmo=" 257 | }, 258 | "file-loader": { 259 | "version": "0.10.1", 260 | "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-0.10.1.tgz", 261 | "integrity": "sha1-gVA0EZiR/GRB+1pkwRvJPCLd2EI=", 262 | "dev": true, 263 | "dependencies": { 264 | "loader-utils": { 265 | "version": "1.1.0", 266 | "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", 267 | "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=" 268 | } 269 | } 270 | }, 271 | "firebase": { 272 | "version": "4.1.3", 273 | "resolved": "https://registry.npmjs.org/firebase/-/firebase-4.1.3.tgz", 274 | "integrity": "sha1-5dcyc2bIVNwSRhYzuov+6i9cc1g=", 275 | "dependencies": { 276 | "base64url": { 277 | "version": "https://registry.npmjs.org/base64url/-/base64url-2.0.0.tgz", 278 | "integrity": "sha1-6sFuA+oUOO/5Qj1puqNiYu0fcLs=" 279 | }, 280 | "buffer-equal-constant-time": { 281 | "version": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", 282 | "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" 283 | }, 284 | "dom-storage": { 285 | "version": "https://registry.npmjs.org/dom-storage/-/dom-storage-2.0.2.tgz", 286 | "integrity": "sha1-7RfL9oq9EOCu+BgnE+KXxeS1ALA=" 287 | }, 288 | "ecdsa-sig-formatter": { 289 | "version": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.9.tgz", 290 | "integrity": "sha1-S8kmJ07Dtau1AW5+HWCSGsJisqE=" 291 | }, 292 | "faye-websocket": { 293 | "version": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.9.3.tgz", 294 | "integrity": "sha1-SCpQWw3wrmJrlphm0710DNuWLoM=" 295 | }, 296 | "hoek": { 297 | "version": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", 298 | "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" 299 | }, 300 | "isemail": { 301 | "version": "https://registry.npmjs.org/isemail/-/isemail-1.2.0.tgz", 302 | "integrity": "sha1-vgPfjMPineTSxd9lASY/H6RZXpo=" 303 | }, 304 | "joi": { 305 | "version": "https://registry.npmjs.org/joi/-/joi-6.10.1.tgz", 306 | "integrity": "sha1-TVDDGAeRIgAP5fFq8f+OGRe3fgY=" 307 | }, 308 | "jsonwebtoken": { 309 | "version": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-7.4.1.tgz", 310 | "integrity": "sha1-fKMk9SFfi+A5zTWmxFu4y3SkSPs=" 311 | }, 312 | "jwa": { 313 | "version": "https://registry.npmjs.org/jwa/-/jwa-1.1.5.tgz", 314 | "integrity": "sha1-oFUs4CIHQs1S4VN3SjKQXDDnVuU=" 315 | }, 316 | "jws": { 317 | "version": "https://registry.npmjs.org/jws/-/jws-3.1.4.tgz", 318 | "integrity": "sha1-+ei5M46KhHJ31kRLFGT2GIDgUKI=" 319 | }, 320 | "lodash.once": { 321 | "version": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", 322 | "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" 323 | }, 324 | "moment": { 325 | "version": "https://registry.npmjs.org/moment/-/moment-2.18.1.tgz", 326 | "integrity": "sha1-w2GT3Tzhwu7SrbfIAtu8d6gbHA8=" 327 | }, 328 | "ms": { 329 | "version": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 330 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 331 | }, 332 | "promise-polyfill": { 333 | "version": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-6.0.2.tgz", 334 | "integrity": "sha1-2chtPcTcLfkBboiUbe/Wm0m0EWI=" 335 | }, 336 | "safe-buffer": { 337 | "version": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.0.tgz", 338 | "integrity": "sha1-/kyEYDl/nqqqWOc75GJzQIpF4iM=" 339 | }, 340 | "topo": { 341 | "version": "https://registry.npmjs.org/topo/-/topo-1.1.0.tgz", 342 | "integrity": "sha1-6ddRYV0buH3IZdsYL6HKCl71NtU=" 343 | }, 344 | "websocket-driver": { 345 | "version": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", 346 | "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=" 347 | }, 348 | "websocket-extensions": { 349 | "version": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.1.tgz", 350 | "integrity": "sha1-domUmcGEtu91Q3fC27DNbLVdKec=" 351 | }, 352 | "xmlhttprequest": { 353 | "version": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", 354 | "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=" 355 | }, 356 | "xtend": { 357 | "version": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", 358 | "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" 359 | } 360 | } 361 | }, 362 | "firebaseui": { 363 | "version": "2.2.1", 364 | "resolved": "https://registry.npmjs.org/firebaseui/-/firebaseui-2.2.1.tgz", 365 | "integrity": "sha1-EA+6bteaiGiRu3aDO9pp/wUC1BA=" 366 | }, 367 | "follow-redirects": { 368 | "version": "1.14.9", 369 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz", 370 | "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==" 371 | }, 372 | "font-awesome": { 373 | "version": "4.7.0", 374 | "resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz", 375 | "integrity": "sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM=" 376 | }, 377 | "friendly-errors-webpack-plugin": { 378 | "version": "1.6.1", 379 | "resolved": "https://registry.npmjs.org/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.6.1.tgz", 380 | "integrity": "sha1-4yeBxHIvVGoGqbXXp8+ihSA3XXA=", 381 | "dev": true 382 | }, 383 | "fs.realpath": { 384 | "version": "1.0.0", 385 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 386 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 387 | "dev": true 388 | }, 389 | "function-bind": { 390 | "version": "1.1.1", 391 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 392 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 393 | "dev": true 394 | }, 395 | "glob": { 396 | "version": "7.2.0", 397 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", 398 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", 399 | "dev": true, 400 | "requires": { 401 | "fs.realpath": "^1.0.0", 402 | "inflight": "^1.0.4", 403 | "inherits": "2", 404 | "minimatch": "^3.0.4", 405 | "once": "^1.3.0", 406 | "path-is-absolute": "^1.0.0" 407 | } 408 | }, 409 | "gmaps": { 410 | "version": "0.4.24", 411 | "resolved": "https://registry.npmjs.org/gmaps/-/gmaps-0.4.24.tgz", 412 | "integrity": "sha1-B/IvDPw+TjJJiVD/r9fKY1/8EAw=" 413 | }, 414 | "has": { 415 | "version": "1.0.3", 416 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 417 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 418 | "dev": true, 419 | "requires": { 420 | "function-bind": "^1.1.1" 421 | } 422 | }, 423 | "highlight": { 424 | "version": "0.2.4", 425 | "resolved": "https://registry.npmjs.org/highlight/-/highlight-0.2.4.tgz", 426 | "integrity": "sha1-isAodbA/WTXgZ1hSt2z+H9WODf8=" 427 | }, 428 | "html-webpack-plugin": { 429 | "version": "2.29.0", 430 | "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-2.29.0.tgz", 431 | "integrity": "sha1-6Yf0IYU9O2k4yMTIFxhC5f0XryM=", 432 | "dev": true 433 | }, 434 | "http-proxy-middleware": { 435 | "version": "0.17.4", 436 | "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz", 437 | "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=", 438 | "dev": true 439 | }, 440 | "inflight": { 441 | "version": "1.0.6", 442 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 443 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 444 | "dev": true, 445 | "requires": { 446 | "once": "^1.3.0", 447 | "wrappy": "1" 448 | } 449 | }, 450 | "inherits": { 451 | "version": "2.0.4", 452 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 453 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 454 | "dev": true 455 | }, 456 | "interpret": { 457 | "version": "1.4.0", 458 | "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", 459 | "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", 460 | "dev": true 461 | }, 462 | "is-core-module": { 463 | "version": "2.8.1", 464 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", 465 | "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", 466 | "dev": true, 467 | "requires": { 468 | "has": "^1.0.3" 469 | } 470 | }, 471 | "json-loader": { 472 | "version": "0.5.4", 473 | "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.4.tgz", 474 | "integrity": "sha1-i6oTZaYy9Yo8RtIBdfxgAsluN94=", 475 | "dev": true 476 | }, 477 | "material-design-icons": { 478 | "version": "3.0.1", 479 | "resolved": "https://registry.npmjs.org/material-design-icons/-/material-design-icons-3.0.1.tgz", 480 | "integrity": "sha1-mnHEh0chjrylHlGmbaaCA4zct78=" 481 | }, 482 | "minimatch": { 483 | "version": "3.0.4", 484 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 485 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 486 | "dev": true, 487 | "requires": { 488 | "brace-expansion": "^1.1.7" 489 | } 490 | }, 491 | "moment": { 492 | "version": "2.29.2", 493 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.2.tgz", 494 | "integrity": "sha512-UgzG4rvxYpN15jgCmVJwac49h9ly9NurikMWGPdVxm8GZD6XjkKPxDTjQQ43gtGgnV3X0cAyWDdP2Wexoquifg==" 495 | }, 496 | "once": { 497 | "version": "1.4.0", 498 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 499 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 500 | "dev": true, 501 | "requires": { 502 | "wrappy": "1" 503 | } 504 | }, 505 | "opn": { 506 | "version": "4.0.2", 507 | "resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz", 508 | "integrity": "sha1-erwi5kTf9jsKltWrfyeQwPAavJU=", 509 | "dev": true 510 | }, 511 | "path-is-absolute": { 512 | "version": "1.0.1", 513 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 514 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 515 | "dev": true 516 | }, 517 | "path-parse": { 518 | "version": "1.0.7", 519 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 520 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 521 | "dev": true 522 | }, 523 | "postcss-loader": { 524 | "version": "1.3.3", 525 | "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-1.3.3.tgz", 526 | "integrity": "sha1-piHqH6KQYqg5cqRvVEhncTAZFus=", 527 | "dev": true, 528 | "dependencies": { 529 | "loader-utils": { 530 | "version": "1.1.0", 531 | "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", 532 | "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=" 533 | } 534 | } 535 | }, 536 | "progress-bar-webpack-plugin": { 537 | "version": "1.9.3", 538 | "resolved": "https://registry.npmjs.org/progress-bar-webpack-plugin/-/progress-bar-webpack-plugin-1.9.3.tgz", 539 | "integrity": "sha1-gfuL2OONpu2vmiC+7Xm9l43WPCo=", 540 | "dev": true 541 | }, 542 | "promise-polyfill": { 543 | "version": "6.0.2", 544 | "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-6.0.2.tgz", 545 | "integrity": "sha1-2chtPcTcLfkBboiUbe/Wm0m0EWI=" 546 | }, 547 | "quasar-framework": { 548 | "version": "0.13.10", 549 | "resolved": "https://registry.npmjs.org/quasar-framework/-/quasar-framework-0.13.10.tgz", 550 | "integrity": "sha1-/V6BPMnHUiDJL1h7GVJUI/96pvg=" 551 | }, 552 | "rechoir": { 553 | "version": "0.6.2", 554 | "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", 555 | "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", 556 | "dev": true, 557 | "requires": { 558 | "resolve": "^1.1.6" 559 | } 560 | }, 561 | "resolve": { 562 | "version": "1.21.0", 563 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz", 564 | "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==", 565 | "dev": true, 566 | "requires": { 567 | "is-core-module": "^2.8.0", 568 | "path-parse": "^1.0.7", 569 | "supports-preserve-symlinks-flag": "^1.0.0" 570 | } 571 | }, 572 | "roboto-fontface": { 573 | "version": "0.7.0", 574 | "resolved": "https://registry.npmjs.org/roboto-fontface/-/roboto-fontface-0.7.0.tgz", 575 | "integrity": "sha1-LzZGTlyZNT6EJ/VfH8p74aikF9k=" 576 | }, 577 | "shelljs": { 578 | "version": "0.8.5", 579 | "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", 580 | "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", 581 | "dev": true, 582 | "requires": { 583 | "glob": "^7.0.0", 584 | "interpret": "^1.0.0", 585 | "rechoir": "^0.6.2" 586 | } 587 | }, 588 | "stylus": { 589 | "version": "0.54.5", 590 | "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.5.tgz", 591 | "integrity": "sha1-QrlWCTHKcJDOhRWnmLqeaqPW3Hk=", 592 | "dev": true, 593 | "dependencies": { 594 | "glob": { 595 | "version": "7.0.6", 596 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", 597 | "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=" 598 | }, 599 | "sax": { 600 | "version": "0.5.8", 601 | "resolved": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz", 602 | "integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE=" 603 | }, 604 | "source-map": { 605 | "version": "0.1.43", 606 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", 607 | "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=" 608 | } 609 | } 610 | }, 611 | "stylus-loader": { 612 | "version": "2.5.1", 613 | "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-2.5.1.tgz", 614 | "integrity": "sha1-1a2KfglYrcErhYHnuxabmmHVQhY=", 615 | "dev": true 616 | }, 617 | "supports-preserve-symlinks-flag": { 618 | "version": "1.0.0", 619 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 620 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 621 | "dev": true 622 | }, 623 | "url-loader": { 624 | "version": "0.5.9", 625 | "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-0.5.9.tgz", 626 | "integrity": "sha512-B7QYFyvv+fOBqBVeefsxv6koWWtjmHaMFT6KZWti4KRw8YUD/hOU+3AECvXuzyVawIBx3z7zQRejXCDSO5kk1Q==", 627 | "dev": true, 628 | "dependencies": { 629 | "loader-utils": { 630 | "version": "1.1.0", 631 | "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", 632 | "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=" 633 | } 634 | } 635 | }, 636 | "vivus": { 637 | "version": "0.4.1", 638 | "resolved": "https://registry.npmjs.org/vivus/-/vivus-0.4.1.tgz", 639 | "integrity": "sha1-re6AOqbQB0ar2Mv1yFFGCUfkt5w=" 640 | }, 641 | "vue": { 642 | "version": "2.2.2", 643 | "resolved": "https://registry.npmjs.org/vue/-/vue-2.2.2.tgz", 644 | "integrity": "sha1-F+00AopqtN6FVzih176r30Ce4j8=" 645 | }, 646 | "vue-loader": { 647 | "version": "11.3.4", 648 | "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-11.3.4.tgz", 649 | "integrity": "sha1-ZeEKRM4JLZBuFLvHKYHeyZ6wkNI=", 650 | "dev": true, 651 | "dependencies": { 652 | "loader-utils": { 653 | "version": "1.1.0", 654 | "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", 655 | "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=" 656 | } 657 | } 658 | }, 659 | "vue-router": { 660 | "version": "2.7.0", 661 | "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-2.7.0.tgz", 662 | "integrity": "sha512-kxgsT50dDExua3i103nxNBjlfk8LeUmO9iujVxXV42MnISINHUjqMrknpOOJEg+i9nEkoVgG8N86Pklze35c/A==" 663 | }, 664 | "vue-style-loader": { 665 | "version": "2.0.5", 666 | "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-2.0.5.tgz", 667 | "integrity": "sha1-8O+smS/r4/EuST4zTtsTzSNaPSI=", 668 | "dev": true, 669 | "dependencies": { 670 | "loader-utils": { 671 | "version": "1.1.0", 672 | "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", 673 | "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=" 674 | } 675 | } 676 | }, 677 | "vue-template-compiler": { 678 | "version": "2.2.2", 679 | "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.2.2.tgz", 680 | "integrity": "sha1-D1/XQs4Z4kqSNwzHpGsCpvSFIVI=", 681 | "dev": true 682 | }, 683 | "vuelidate": { 684 | "version": "0.3.1", 685 | "resolved": "https://registry.npmjs.org/vuelidate/-/vuelidate-0.3.1.tgz", 686 | "integrity": "sha1-9bdHdD3VVUjiNQQkx89n5eCVXRY=" 687 | }, 688 | "vuex": { 689 | "version": "2.3.1", 690 | "resolved": "https://registry.npmjs.org/vuex/-/vuex-2.3.1.tgz", 691 | "integrity": "sha1-zejpl8H5lXcZvH3qFU+appHZgaY=" 692 | }, 693 | "webpack": { 694 | "version": "2.6.1", 695 | "resolved": "https://registry.npmjs.org/webpack/-/webpack-2.6.1.tgz", 696 | "integrity": "sha1-LgRX8KuxrF3zqxBsacZy8jZ4Xwc=", 697 | "dev": true, 698 | "dependencies": { 699 | "source-list-map": { 700 | "version": "1.1.2", 701 | "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-1.1.2.tgz", 702 | "integrity": "sha1-mIkBnRAkzOVc3AaUmDN+9hhqEaE=" 703 | }, 704 | "uglify-js": { 705 | "version": "2.8.29", 706 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", 707 | "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", 708 | "dependencies": { 709 | "yargs": { 710 | "version": "3.10.0", 711 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", 712 | "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=" 713 | } 714 | } 715 | }, 716 | "webpack-sources": { 717 | "version": "0.2.3", 718 | "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-0.2.3.tgz", 719 | "integrity": "sha1-F8Yr+vE8cH+dAsR54Nzd6DgGl/s=" 720 | } 721 | } 722 | }, 723 | "webpack-dev-middleware": { 724 | "version": "1.11.0", 725 | "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.11.0.tgz", 726 | "integrity": "sha1-CWkdCXOjCtH4Ksc6EuIIfwpHVPk=", 727 | "dev": true 728 | }, 729 | "webpack-hot-middleware": { 730 | "version": "2.18.1", 731 | "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.18.1.tgz", 732 | "integrity": "sha512-4/UBBose22z4+mLMUzuH+SXb+3jQ8P18UfMZur7t/jjIOqI0VVuA6qzAugpVA5CAu9XrhV6tEwhF/neNQYIWEw==", 733 | "dev": true 734 | }, 735 | "webpack-merge": { 736 | "version": "3.0.0", 737 | "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-3.0.0.tgz", 738 | "integrity": "sha1-8snChpG8RP2xJHRcuEqPq3QSVwE=", 739 | "dev": true 740 | }, 741 | "wrappy": { 742 | "version": "1.0.2", 743 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 744 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 745 | "dev": true 746 | } 747 | } 748 | } 749 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "quasar-app", 3 | "version": "0.0.1", 4 | "description": "A Quasar App", 5 | "author": "Your Name", 6 | "scripts": { 7 | "clean": "node build/script.clean.js", 8 | "dev": "node build/script.dev.js", 9 | "build": "node build/script.build.js", 10 | "lint": "eslint --ext .js,.vue src" 11 | }, 12 | "dependencies": { 13 | "axios": "^0.21.1", 14 | "babel-runtime": "^6.0.0", 15 | "chart.js": "^2.5.0", 16 | "countup.js": "^1.8.2", 17 | "dragula": "^3.7.2", 18 | "fastclick": "^1.0.6", 19 | "firebase": "^4.1.3", 20 | "firebaseui": "^2.2.1", 21 | "font-awesome": "^4.7.0", 22 | "gmaps": "^0.4.24", 23 | "highlight": "^0.2.4", 24 | "material-design-icons": "^3.0.1", 25 | "moment": "^2.15.0", 26 | "promise-polyfill": "^6.0.2", 27 | "quasar-framework": "^0.13.2", 28 | "roboto-fontface": "^0.7.0", 29 | "vivus": "^0.4.0", 30 | "vue": "2.2.2", 31 | "vue-router": "^2.3", 32 | "vuelidate": "^0.3.1", 33 | "vuex": "^2.2.1" 34 | }, 35 | "devDependencies": { 36 | "autoprefixer": "^6.4.0", 37 | "babel-core": "^6.0.0", 38 | "babel-eslint": "^7.0.0", 39 | "babel-loader": "^6.0.0", 40 | "babel-plugin-transform-runtime": "^6.0.0", 41 | "babel-preset-es2015": "^6.0.0", 42 | "babel-preset-stage-2": "^6.0.0", 43 | "colors": "^1.1.2", 44 | "connect-history-api-fallback": "^1.1.0", 45 | "css-loader": "^0.26.0", 46 | "eslint": "^3.0.1", 47 | "eslint-config-standard": "^6.2.0", 48 | "eslint-friendly-formatter": "^2.0.5", 49 | "eslint-loader": "^1.3.0", 50 | "eslint-plugin-html": "^2.0.1", 51 | "eslint-plugin-promise": "^3.3.0", 52 | "eslint-plugin-standard": "^2.0.0", 53 | "eventsource-polyfill": "^0.9.6", 54 | "express": "^4.13.3", 55 | "extract-text-webpack-plugin": "^2.0.0-beta.4", 56 | "file-loader": "^0.10.0", 57 | "friendly-errors-webpack-plugin": "^1.1.3", 58 | "html-webpack-plugin": "^2.8.1", 59 | "http-proxy-middleware": "^0.17.0", 60 | "json-loader": "^0.5.4", 61 | "opn": "^4.0.2", 62 | "postcss-loader": "^1.0.0", 63 | "progress-bar-webpack-plugin": "^1.9.0", 64 | "shelljs": "^0.8.5", 65 | "stylus": "^0.54.5", 66 | "stylus-loader": "^2.1.1", 67 | "url-loader": "^0.5.7", 68 | "vue-loader": "^11.1.4", 69 | "vue-style-loader": "^2.0.3", 70 | "vue-template-compiler": "2.2.2", 71 | "webpack": "^2.2.1", 72 | "webpack-dev-middleware": "^1.8.4", 73 | "webpack-hot-middleware": "^2.17.0", 74 | "webpack-merge": "^3.0.0" 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 45 | 46 | 198 | -------------------------------------------------------------------------------- /src/assets/quasar-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/odranoelBR/vue-quasar-admin-example/8ae8fadcc56cbeccbac1aa66fed12709f2a2ac92/src/assets/quasar-logo.png -------------------------------------------------------------------------------- /src/components/Auth.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 23 | 24 | 27 | -------------------------------------------------------------------------------- /src/components/AuthSuccess.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | Signup succeeded 4 | Log out 5 | 6 | 7 | 8 | {{name}} 9 | {{email}} 10 | {{userId}} 11 | 12 | {{user}} 13 | 14 | 15 | 16 | 47 | -------------------------------------------------------------------------------- /src/components/Error404.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 404 5 | 6 | 7 | 8 | error_outline 9 | Oops. Nothing here... 10 | 11 | 12 | keyboard_arrow_left 13 | Go back 14 | 15 | 16 | 17 | Go home 18 | home 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 41 | 42 | 59 | -------------------------------------------------------------------------------- /src/components/layout/content-header.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | {{routerTitle}} 4 | 5 | settings 6 | 7 | 8 | 9 | Layout 10 | 11 | 16 | 17 | 18 | 19 | Menu Collapse 20 | 21 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 48 | 76 | -------------------------------------------------------------------------------- /src/components/layout/drawer/drawer.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | {{ name }} 8 | 9 | {{ email }} 10 | 11 | 12 | 13 | person 14 | lock 15 | exit_to_app 16 | 17 | 18 | 19 | 20 | 21 | 22 | Powered by 23 | 24 | 25 | 26 | 27 | 28 | 95 | 127 | -------------------------------------------------------------------------------- /src/components/layout/drawer/menuOne.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{replaceUnderlineToSpace(index)}} 5 | 6 | 7 | 8 | 9 | 10 | {{child.name}} 11 | 12 | 13 | 14 | 15 | 16 | 17 | Quasar Ready UI 18 | 20 | 21 | Components (55+) 22 | 23 | 24 | 25 | 26 | 57 | 70 | -------------------------------------------------------------------------------- /src/components/layout/drawer/menuTwo.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{replaceUnderlineToSpace(index)}} 5 | 6 | 7 | {{child.name}} 8 | 9 | 10 | 11 | Quasar Ready UI 12 | 14 | 15 | Components (55+) 16 | 17 | 18 | 19 | 20 | 33 | 46 | -------------------------------------------------------------------------------- /src/components/layout/img/avatar-1.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 47 | 60 | 70 | 100 | 106 | 109 | 112 | 114 | 128 | 129 | 136 | 142 | 143 | 144 | 145 | 147 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 159 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | -------------------------------------------------------------------------------- /src/components/layout/img/quasar-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/odranoelBR/vue-quasar-admin-example/8ae8fadcc56cbeccbac1aa66fed12709f2a2ac92/src/components/layout/img/quasar-logo.png -------------------------------------------------------------------------------- /src/components/layout/img/vue-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/odranoelBR/vue-quasar-admin-example/8ae8fadcc56cbeccbac1aa66fed12709f2a2ac92/src/components/layout/img/vue-logo.png -------------------------------------------------------------------------------- /src/components/layout/toolbar/messagePopover.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 5 | 6 | 7 | Messages from people 8 | 11 | 12 | 13 | {{post.title}} 14 | {{randomDate()}} 15 | 16 | 17 | New 18 | 19 | 20 | 21 | 22 | 23 | 24 | 69 | 85 | -------------------------------------------------------------------------------- /src/components/layout/toolbar/toolbar.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | arrow_back 7 | 8 | 9 | 10 | menu 11 | 12 | 13 | Quasar Admin App 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 44 | 52 | -------------------------------------------------------------------------------- /src/components/views/dashboard/one/cardChart.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{cardTitle}} 5 | 6 | 7 | equalizer 8 | equalizer 9 | pie_chart_outlined 10 | donut_large 11 | 12 | 13 | portrait 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 98 | 101 | -------------------------------------------------------------------------------- /src/components/views/dashboard/one/cardTodo.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{cardTitle}} 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | {{index + 1}} 15 | 16 | {{todo.title}} 17 | 18 | 19 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 80 | 89 | -------------------------------------------------------------------------------- /src/components/views/dashboard/one/cardTotal.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | {{iconName}} 7 | 8 | 9 | {{title}} 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 45 | 50 | -------------------------------------------------------------------------------- /src/components/views/dashboard/one/dashboard.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | 11 | 12 | 13 | 18 | 19 | 20 | 21 | 26 | 27 | 28 | 29 | 30 | 31 | 35 | 36 | 37 | 39 | 40 | 41 | 42 | 43 | 44 | 47 | 48 | 49 | 50 | 51 | 52 | 101 | 102 | -------------------------------------------------------------------------------- /src/components/views/dashboard/one/knobStatistics.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 15 | 16 | 17 | 27 | 28 | 29 | 30 | 31 | 38 | 39 | 40 | 41 | 42 | 50 | 51 | 52 | 53 | 54 | 62 | 63 | 64 | 65 | 66 | 67 | 105 | 107 | -------------------------------------------------------------------------------- /src/components/views/dashboard/one/tagKnob.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 16 | 17 | {{title}} 18 | 19 | 20 | 21 | 55 | 67 | -------------------------------------------------------------------------------- /src/components/views/dragAndDrop/dragAndDrop.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 25 | 29 | -------------------------------------------------------------------------------- /src/components/views/dragAndDrop/exampleTwo/cardExampleTwo.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Exemple Two - Simple drag and drop kanban 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 52 | 54 | -------------------------------------------------------------------------------- /src/components/views/dragAndDrop/exampleTwo/cardTask.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | crop_free 5 | 6 | 7 | keyboard_arrow_down 8 | 9 | 10 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 26 | 27 | 28 | 29 | 30 | 48 | 53 | -------------------------------------------------------------------------------- /src/components/views/dragAndDrop/exampleTwo/doingColumn.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Doing 5 | 9 | add 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 37 | 38 | 43 | -------------------------------------------------------------------------------- /src/components/views/dragAndDrop/exampleTwo/doneColumn.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Done 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 21 | 22 | 27 | -------------------------------------------------------------------------------- /src/components/views/dragAndDrop/exampleTwo/todoColumn.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Todo 5 | 9 | add 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 37 | 38 | 43 | -------------------------------------------------------------------------------- /src/components/views/dragAndDrop/exempleOne/cardExampleOne.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Exemple One - Drap Fruits to the cart 5 | 6 | 7 | 8 | 9 | 10 | 11 | $5 12 | 13 | 14 | 15 | $3 16 | 17 | 18 | 19 | $2 20 | 21 | 22 | 23 | $4 24 | 25 | 26 | 27 | $7 28 | 29 | 30 | 31 | 32 | Total $ 33 | 34 | 35 | 36 | 37 | 38 | Pay 39 | 40 | 41 | 42 | 43 | 44 | 45 | 87 | 88 | 118 | -------------------------------------------------------------------------------- /src/components/views/dragAndDrop/exempleOne/img/apple.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 10 | 12 | 15 | 18 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /src/components/views/dragAndDrop/exempleOne/img/cart.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /src/components/views/dragAndDrop/exempleOne/img/orange.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 22 | 23 | 24 | 25 | 28 | 29 | 31 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /src/components/views/dragAndDrop/exempleOne/img/pear.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 10 | 13 | 19 | 22 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /src/components/views/dragAndDrop/exempleOne/img/strawberry.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 13 | 14 | 19 | 20 | 23 | 26 | 29 | 32 | 35 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | -------------------------------------------------------------------------------- /src/components/views/dragAndDrop/exempleOne/img/watermelon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 10 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /src/components/views/form/advancedFormOne/advancedFormOne.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Choose photos to reveal of the user 7 | 8 | 9 | { currentStep = stepNumber }"> 10 | 11 | 12 | 13 | 20 | Search 21 | 22 | 23 | 24 | 25 | 26 | 27 | Continue 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | Back 36 | 37 | 38 | Preview 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 106 | 108 | -------------------------------------------------------------------------------- /src/components/views/form/advancedFormOne/cardDataTable.vue: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 12 | 13 | 14 | Add to print 15 | 16 | 17 | 18 | 19 | 20 | 77 | 78 | 80 | -------------------------------------------------------------------------------- /src/components/views/form/advancedFormOne/cardUserData.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{userData.name}} 5 | {{userData.email}} 6 | Choose one of the user Albums 7 | 8 | 9 | 10 | 11 | 12 | 13 | {{album.title}} 14 | 15 | 16 | 17 | 18 | 19 | 20 | 53 | 71 | -------------------------------------------------------------------------------- /src/components/views/form/embeeded/eDateTime.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 17 | {{validationMessages[key]}} 18 | 19 | 20 | 21 | check 22 | 23 | 24 | clear 25 | 26 | 27 | 28 | 29 | 30 | 77 | 113 | -------------------------------------------------------------------------------- /src/components/views/form/embeeded/eInput.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | {{label}} 8 | 9 | 13 | 14 | {{validationMessages[key]}} 15 | 16 | 17 | 18 | check 19 | 20 | 21 | clear 22 | 23 | 24 | 25 | 26 | 27 | 73 | 109 | -------------------------------------------------------------------------------- /src/components/views/form/embeeded/eSelect.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 17 | {{validationMessages[key]}} 18 | 19 | 20 | 21 | check 22 | 23 | 24 | clear 25 | 26 | 27 | 28 | 29 | 30 | 77 | 116 | -------------------------------------------------------------------------------- /src/components/views/form/embeeded/embeeded.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Input 9 | 10 | 11 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | Select 25 | 26 | 27 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | DateTime 43 | 44 | 45 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | Try Submit 60 | 61 | 62 | 63 | 64 | 65 | 119 | 120 | -------------------------------------------------------------------------------- /src/components/views/form/simpleForm/modalAdress.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Adress of {{user.name}} 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | Street 14 | 15 | 16 | 17 | 18 | 19 | Suite 20 | 21 | 22 | 23 | 24 | 25 | City 26 | 27 | 28 | 29 | 30 | 31 | Zipcode 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | Save 40 | 41 | 42 | Close 43 | 44 | 45 | 46 | 47 | 48 | 89 | 95 | -------------------------------------------------------------------------------- /src/components/views/form/simpleForm/simpleForm.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Search Users 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | Save 24 | 25 | 26 | Check Adress 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 89 | 94 | -------------------------------------------------------------------------------- /src/components/views/form/simpleForm/userForm.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Username 8 | 9 | 10 | 11 | 12 | 13 | Phone 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | Website 22 | 23 | 24 | 25 | 26 | 27 | Email 28 | 29 | 30 | 31 | 32 | 33 | 34 | 42 | 47 | -------------------------------------------------------------------------------- /src/components/views/login/login-one.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | {{color}} 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | {{tone}} 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 35 | 36 | {{logo}} 37 | 38 | 39 | 40 | 41 | Email 42 | 43 | 44 | 45 | Password 46 | 47 | 48 | 49 | Login 50 | Login Google 51 | Login Facebook 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | {{bClass}} 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | {{logoName}} 75 | 76 | 77 | Animate ! 78 | 79 | 80 | 81 | 82 | 83 | 84 | 151 | 165 | -------------------------------------------------------------------------------- /src/components/views/login/logoData.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | export default { 3 | Digitalizer: ` 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | `, 23 | Keytronic: 24 | ` 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | `, 85 | Molectron: ` 86 | 87 | 88 | ` 89 | 90 | } 91 | -------------------------------------------------------------------------------- /src/components/views/pricing/cardPlanOne.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {{title}} 6 | 7 | 8 | 9 | $ {{price}} 10 | {{priceSubtitle}} 11 | 12 | 13 | 14 | 15 | 16 | Choose 17 | 18 | 19 | 20 | 21 | 22 | 35 | 54 | -------------------------------------------------------------------------------- /src/components/views/pricing/cardPlanTwo.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{title}} 5 | $ {{price}} {{priceSubtitle}} 6 | 7 | 8 | 9 | Vitamin A 10 | 11 | 13 | 14 | 15 | 16 | 17 | 18 | Vitamin K 19 | 20 | 22 | 23 | 24 | 25 | 26 | 27 | Vitamin B 28 | 29 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 50 | Choose 51 | 52 | 53 | 54 | 55 | 101 | 112 | -------------------------------------------------------------------------------- /src/components/views/pricing/plansBenefits/benefitFour.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 Oranges 5 | 6 | 7 | 6 Limons 8 | 9 | 10 | 3 Grapes 11 | 12 | 13 | 14 | 15 | 16 | 23 | 24 | 26 | -------------------------------------------------------------------------------- /src/components/views/pricing/plansBenefits/benefitOne.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 50 Oranges 6 | 7 | 8 | 45 Limes 9 | 10 | 11 | 12 | 13 | 43 Blackberries 14 | 15 | 16 | 22 Grapes 17 | 18 | 19 | 20 | 21 | 5 Watermelon 22 | 23 | 24 | 10 Casaba 25 | 26 | 27 | 28 | 29 | 30 | 37 | 38 | 40 | -------------------------------------------------------------------------------- /src/components/views/pricing/plansBenefits/benefitThree.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | Citrus 4 | 5 | 16 Oranges 6 | 7 | 8 | 12 Limes 9 | 10 | 11 | Berries 12 | 13 | 14 Blackberries 14 | 15 | 16 | 6 Grapes 17 | 18 | 19 | 20 | 27 | 29 | -------------------------------------------------------------------------------- /src/components/views/pricing/plansBenefits/benefitTwo.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | Citrus 4 | 5 | 24 Oranges 6 | 7 | 8 | 20 Limes 9 | 10 | 11 | Berries 12 | 13 | 20 Blackberries 14 | 15 | 16 | 10 Grapes 17 | 18 | 19 | 20 | 27 | 29 | -------------------------------------------------------------------------------- /src/components/views/pricing/pricing.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Plan model type {{cardType}} 6 | 7 | 8 | 9 | Vertical One 10 | 11 | 12 | Horizontal One 13 | 14 | 15 | 16 | 17 | 18 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 113 | 122 | -------------------------------------------------------------------------------- /src/components/views/serverSideDataTable/serverSideDataTable.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Example using pagination / filter outside of data tables (Tks to 6 | Willian Correa ) 7 | 8 | 9 | 10 | 12 | 13 | 14 | 18 | 19 | 20 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 83 | 84 | 95 | -------------------------------------------------------------------------------- /src/components/views/serverSideDataTable/tooltipButton.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | image 4 | 5 | 6 | 7 | 8 | 9 | 14 | 19 | -------------------------------------------------------------------------------- /src/configs/axios.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios' 2 | import { Loading } from 'quasar' 3 | 4 | let loadFunction = config => { 5 | Loading.show() 6 | return config 7 | } 8 | let finishFunction = response => { 9 | Loading.hide() 10 | return response 11 | } 12 | let errorFunction = error => { 13 | Loading.hide() 14 | return Promise.reject(error) 15 | } 16 | 17 | const axiosInstanceJsonPlaceholder = 18 | axios.create({ baseURL: 'https://jsonplaceholder.typicode.com/' }) 19 | const axiosInstancePunk = 20 | axios.create({ baseURL: 'https://api.punkapi.com/v2/' }) 21 | 22 | axiosInstanceJsonPlaceholder.interceptors.request.use(loadFunction) 23 | axiosInstancePunk.interceptors.request.use(loadFunction) 24 | 25 | axiosInstanceJsonPlaceholder.interceptors.response.use(finishFunction, errorFunction) 26 | axiosInstancePunk.interceptors.response.use(finishFunction, errorFunction) 27 | 28 | let clients = { 29 | $http: { 30 | get () { 31 | return { 32 | jsonplaceholder: axiosInstanceJsonPlaceholder, 33 | punk: axiosInstancePunk 34 | } 35 | } 36 | } 37 | } 38 | 39 | export default (Vue) => { 40 | Object.defineProperties(Vue.prototype, clients) 41 | } 42 | -------------------------------------------------------------------------------- /src/configs/router.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import VueRouter from 'vue-router' 3 | 4 | Vue.use(VueRouter) 5 | 6 | function load (component) { 7 | return () => System.import(`components/${component}.vue`) 8 | } 9 | 10 | export default new VueRouter({ 11 | /* 12 | * NOTE! VueRouter "history" mode DOESN'T works for Cordova builds, 13 | * it is only to be used only for websites. 14 | * 15 | * If you decide to go with "history" mode, please also open /config/index.js 16 | * and set "build.publicPath" to something other than an empty string. 17 | * Example: '/' instead of current '' 18 | * 19 | * If switching back to default "hash" mode, don't forget to set the 20 | * build publicPath back to '' so Cordova builds work again. 21 | */ 22 | 23 | routes: [ 24 | { path: '/', component: load('views/dashboard/one/dashboard'), meta: { name: 'Dashboard One' } }, 25 | { path: '/auth', component: load('Auth'), meta: { name: 'Form Login' } }, 26 | { path: '/success', component: load('AuthSuccess'), meta: { name: 'Form Profile' } }, 27 | { path: '/form', component: load('views/form/simpleForm/simpleForm'), meta: { name: 'Form find / edit' } }, 28 | { path: '/embeeded', component: load('views/form/embeeded/embeeded'), meta: { name: 'Embeeded Validations' } }, 29 | { path: '/advanced-form-one', component: load('views/form/advancedFormOne/advancedFormOne'), meta: { name: 'Advanced Form One' } }, 30 | { path: '/login-one', component: load('views/login/login-one'), meta: { name: 'Login One' } }, 31 | { path: '/pricing', component: load('views/pricing/pricing'), meta: { name: 'Pricing' } }, 32 | { path: '/drag-and-drop', component: load('views/dragAndDrop/dragAndDrop'), meta: { name: 'Drag and Drop' } }, 33 | { path: '/server-side-data-table', component: load('views/serverSideDataTable/serverSideDataTable'), meta: { name: 'Server Side Data Table' } }, 34 | { path: '*', component: load('Error404') } // Not found 35 | ] 36 | }) 37 | -------------------------------------------------------------------------------- /src/configs/store.js: -------------------------------------------------------------------------------- 1 | import Vuex from 'vuex' 2 | import Vue from 'vue' 3 | 4 | Vue.use(Vuex) 5 | 6 | let state = { 7 | layoutNeeded: true, 8 | isLoginPage: false, 9 | mobileMode: false, 10 | menuCollapse: true, 11 | 12 | posts: [] 13 | } 14 | 15 | let mutations = { 16 | setLayoutNeeded (state, value) { 17 | state.layoutNeeded = value 18 | }, 19 | setIsLoginPage (state, value) { 20 | state.isLoginPage = value 21 | }, 22 | setMobileMode (state, value) { 23 | state.mobileMode = value 24 | }, 25 | setMenuCollapse (state, value) { 26 | state.menuCollapse = value 27 | }, 28 | setPosts (state, posts) { 29 | state.posts = posts 30 | } 31 | } 32 | 33 | let getters = { 34 | getLayoutNeeded () { 35 | return state.layoutNeeded 36 | }, 37 | getIsLoginPage () { 38 | return state.isLoginPage 39 | }, 40 | getMobileMode () { 41 | return state.mobileMode 42 | }, 43 | getMenuCollapse () { 44 | return state.menuCollapse 45 | }, 46 | getPosts () { 47 | return state.posts 48 | } 49 | } 50 | 51 | export default new Vuex.Store({ 52 | state, 53 | mutations, 54 | getters 55 | }) 56 | -------------------------------------------------------------------------------- /src/helpers/firebaseConfig.js: -------------------------------------------------------------------------------- 1 | export const config = { 2 | apiKey: 'AIzaSyAtAQsA7-max7T6WWK0Co079ew2mWp6kn8', 3 | authDomain: 'triphin-ccbdb.firebaseapp.com', 4 | databaseURL: 'https://triphin-ccbdb.firebaseio.com', 5 | projectId: 'triphin-ccbdb', 6 | storageBucket: 'triphin-ccbdb.appspot.com', 7 | messagingSenderId: '395196543424' 8 | } 9 | -------------------------------------------------------------------------------- /src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Quasar Admin Examples 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | // === DEFAULT / CUSTOM STYLE === 2 | // WARNING! always comment out ONE of the two require() calls below. 3 | // 1. use next line to activate CUSTOM STYLE (./src/themes) 4 | require(`./themes/app.${__THEME}.styl`) 5 | // 2. or, use next line to activate DEFAULT QUASAR STYLE 6 | // require(`quasar/dist/quasar.${__THEME}.css`) 7 | // ============================== 8 | 9 | import Vue from 'vue' 10 | import Quasar from 'quasar' 11 | import Vuelidate from 'vuelidate' 12 | 13 | import axios from 'configs/axios' 14 | import router from 'configs/router' 15 | import store from './configs/store' 16 | 17 | import VueRouter from 'vue-router' 18 | import firebase from 'firebase' 19 | 20 | import { 21 | config 22 | } from './helpers/firebaseConfig' 23 | 24 | import 'font-awesome/css/font-awesome.css' 25 | import 'highlight/lib/vendor/highlight.js/styles/default.css' 26 | import 'dragula/dist/dragula.css' 27 | 28 | Vue.use(Vuelidate) 29 | Vue.use(Quasar) // Install Quasar Framework 30 | Vue.use(axios) 31 | Vue.use(VueRouter) 32 | 33 | Quasar.start(() => { 34 | /* eslint-disable no-new */ 35 | new Vue({ 36 | el: '#q-app', 37 | created () { 38 | firebase.initializeApp(config) 39 | firebase.auth().onAuthStateChanged((user) => { 40 | if (user) { 41 | this.$store.state.user = this.$firebase.auth().currentUser 42 | this.$router.push('/success') 43 | } 44 | else { 45 | this.$store.state.user = null 46 | if (this.$route.path !== '/auth') { 47 | this.$router.push('/auth') 48 | } 49 | } 50 | }) 51 | }, 52 | router, 53 | store, 54 | render: h => h(require('./App')) 55 | }) 56 | }) 57 | -------------------------------------------------------------------------------- /src/statics/devices-sprite.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/odranoelBR/vue-quasar-admin-example/8ae8fadcc56cbeccbac1aa66fed12709f2a2ac92/src/statics/devices-sprite.jpg -------------------------------------------------------------------------------- /src/statics/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/odranoelBR/vue-quasar-admin-example/8ae8fadcc56cbeccbac1aa66fed12709f2a2ac92/src/statics/favicon.ico -------------------------------------------------------------------------------- /src/themes/app.ios.styl: -------------------------------------------------------------------------------- 1 | // This file is included in the build if src/main.js imports it. 2 | // Otherwise the default iOS CSS file is bundled. 3 | // Check "DEFAULT / CUSTOM STYLE" in src/main.js 4 | 5 | // App Shared Variables 6 | // -------------------------------------------------- 7 | // Shared Stylus variables go in the app.variables.styl file 8 | @import 'app.variables' 9 | 10 | // App iOS Design Variables 11 | // -------------------------------------------------- 12 | // iOS Design only Stylus variables can go here 13 | // http://quasar-framework.org/api/css-stylus-variables.html 14 | 15 | $typography-font-family ?= '-apple-system', 'Helvetica Neue', Helvetica, Arial, sans-serif 16 | 17 | $toolbar-color ?= white 18 | $toolbar-background ?= $primary 19 | $toolbar-active-color ?= $light 20 | $toolbar-faded-color ?= composite-color($toolbar-color) 21 | 22 | // Quasar iOS Design Stylus 23 | // -------------------------------------------------- 24 | // Custom App variables must be declared before importing Quasar. 25 | // Quasar will use its default values when a custom variable isn't provided. 26 | @import '~quasar-framework/dist/quasar.ios.styl' 27 | -------------------------------------------------------------------------------- /src/themes/app.mat.styl: -------------------------------------------------------------------------------- 1 | // This file is included in the build if src/main.js imports it. 2 | // Otherwise the default Material CSS file is bundled. 3 | // Check "DEFAULT / CUSTOM STYLE" in src/main.js 4 | 5 | // App Shared Variables 6 | // -------------------------------------------------- 7 | // Shared Stylus variables go in the app.variables.styl file 8 | @import 'app.variables' 9 | 10 | // App Material Design Variables 11 | // -------------------------------------------------- 12 | // Material Design only Stylus variables can go here 13 | // http://quasar-framework.org/api/css-stylus-variables.html 14 | 15 | $typography-font-family ?= 'Roboto' 16 | 17 | $toolbar-color ?= white 18 | $toolbar-background ?= $primary 19 | $toolbar-active-color ?= $primary 20 | $toolbar-faded-color ?= composite-color($primary) 21 | 22 | // Quasar Material Design Stylus 23 | // -------------------------------------------------- 24 | // Custom App variables must be declared before importing Quasar. 25 | // Quasar will use its default values when a custom variable isn't provided. 26 | @import '~quasar-framework/dist/quasar.mat.styl' 27 | -------------------------------------------------------------------------------- /src/themes/app.variables.styl: -------------------------------------------------------------------------------- 1 | // This file is included in the build if src/main.js imports 2 | // either app.mat.styl or app.ios.styl. 3 | // Check "DEFAULT / CUSTOM STYLE" in src/main.js 4 | 5 | // App Shared Variables 6 | // -------------------------------------------------- 7 | // To customize the look and feel of this app, you can override 8 | // the Stylus variables found in Quasar's source Stylus files. Setting 9 | // variables before Quasar's Stylus will use these variables rather than 10 | // Quasar's default Stylus variable values. Stylus variables specific 11 | // to the themes belong in either the app.ios.styl or app.mat.styl files. 12 | 13 | 14 | // App Shared Color Variables 15 | // -------------------------------------------------- 16 | // It's highly recommended to change the default colors 17 | // to match your app's branding. 18 | 19 | $primary = #027be3 20 | $secondary = #26A69A 21 | $tertiary = #555 22 | 23 | $neutral = #E0E1E2 24 | $positive = #21BA45 25 | $negative = #DB2828 26 | $info = #31CCEC 27 | $warning = #F2C037 28 | 29 | $light = #f4f4f4 30 | $dark = #333 31 | $faded = #777 32 | 33 | $text-color = lighten(black, 17%) 34 | $background-color = white 35 | 36 | $link-color = lighten($primary, 25%) 37 | $link-color-active = $primary 38 | -------------------------------------------------------------------------------- /templates/component.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 12 | 13 | 15 | -------------------------------------------------------------------------------- /templates/layout.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | Title 11 | 12 | 13 | 14 | 21 | 22 | 37 | 38 | 39 | 40 | 43 | 44 | 45 | 46 | 53 | 54 | 56 | -------------------------------------------------------------------------------- /templates/view.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 18 | 19 | 21 | -------------------------------------------------------------------------------- /tests/exampl.test.js: -------------------------------------------------------------------------------- 1 | import { Selector } from 'testcafe'; 2 | 3 | fixture `Getting Started` 4 | .page `http://localhost:8080` 5 | 6 | test('My first test', async t => { 7 | const title = await Selector('#content-header-title').addCustomDOMProperties({innerHTML: el => el.innerHTML}) 8 | await t 9 | .resizeWindow(1920, 1080) 10 | .click('.drawer-closer+ .drawer-closer .item-content') 11 | .expect(title.innerHTML).contains('Pricing') 12 | }) 13 | test('My second test', async t => { 14 | const totalCommentsCard = await Selector('.bg-teal-7 h5').addCustomDOMProperties({innerHTML: el => el.innerHTML}) 15 | await t 16 | .resizeWindow(1920, 1080) 17 | .click('.drawer-closer:nth-child(2) .item-content') 18 | .expect(totalCommentsCard.innerHTML).eql('499') 19 | }) 20 | 21 | --------------------------------------------------------------------------------
{{name}}
{{email}}
{{userId}}
{{user}}
Oops. Nothing here...
11 | 12 | keyboard_arrow_left 13 | Go back 14 | 15 | 16 | 17 | Go home 18 | home 19 | 20 | 21 |
Messages from people
{{title}}
Choose one of the user Albums