├── .babelrc ├── .editorconfig ├── .eslintignore ├── .eslintrc.js ├── .gitignore ├── .postcssrc.js ├── README.md ├── build ├── build.js ├── check-versions.js ├── logo.png ├── utils.js ├── vue-loader.conf.js ├── webpack.base.conf.js ├── webpack.dev.conf.js └── webpack.prod.conf.js ├── config ├── dev.env.js ├── index.js └── prod.env.js ├── dist ├── index.html └── static │ ├── css │ ├── app.cb9d69e9d64b994d48bae8c4859415a4.css │ └── app.cb9d69e9d64b994d48bae8c4859415a4.css.map │ └── js │ ├── app.f7a84d7a3c723f0c4136.js │ ├── app.f7a84d7a3c723f0c4136.js.map │ ├── manifest.25fc6a34a71a20c9ed6f.js │ ├── manifest.25fc6a34a71a20c9ed6f.js.map │ ├── vendor.7dd0f9296fb1e0232208.js │ └── vendor.7dd0f9296fb1e0232208.js.map ├── index.html ├── package-lock.json ├── package.json ├── src ├── App.vue ├── assets │ ├── css │ │ └── normalize.css │ └── images │ │ └── cart.svg ├── components │ ├── AllNotebooks.vue │ ├── AllProducts.vue │ ├── AllSmartphones.vue │ ├── Btn.vue │ ├── CartCheckout.vue │ ├── ListOfProducts.vue │ ├── Mask.vue │ ├── Menu.vue │ ├── Modal.vue │ ├── Popupcart.vue │ ├── Product.vue │ └── Stars.vue ├── main.js ├── router │ └── index.js └── store.js └── static └── .gitkeep /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["env", { 4 | "modules": false, 5 | "targets": { 6 | "browsers": ["> 1%", "last 2 versions", "not ie <= 8"] 7 | } 8 | }], 9 | "stage-2" 10 | ], 11 | "plugins": ["transform-vue-jsx", "transform-runtime"] 12 | } 13 | -------------------------------------------------------------------------------- /.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/ 2 | /config/ 3 | /dist/ 4 | /*.js 5 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | // https://eslint.org/docs/user-guide/configuring 2 | 3 | module.exports = { 4 | root: true, 5 | parserOptions: { 6 | parser: 'babel-eslint' 7 | }, 8 | env: { 9 | browser: true, 10 | }, 11 | // https://github.com/vuejs/eslint-plugin-vue#priority-a-essential-error-prevention 12 | // consider switching to `plugin:vue/strongly-recommended` or `plugin:vue/recommended` for stricter rules. 13 | extends: ['plugin:vue/essential', 'airbnb-base'], 14 | // required to lint *.vue files 15 | plugins: [ 16 | 'vue' 17 | ], 18 | // check if imports actually resolve 19 | settings: { 20 | 'import/resolver': { 21 | webpack: { 22 | config: 'build/webpack.base.conf.js' 23 | } 24 | } 25 | }, 26 | // add your custom rules here 27 | rules: { 28 | // don't require .vue extension when importing 29 | 'import/extensions': ['error', 'always', { 30 | js: 'never', 31 | vue: 'never' 32 | }], 33 | // disallow reassignment of function parameters 34 | // disallow parameter object manipulation except for specific exclusions 35 | 'no-param-reassign': ['error', { 36 | props: true, 37 | ignorePropertyModificationsFor: [ 38 | 'state', // for vuex state 39 | 'acc', // for reduce accumulators 40 | 'e' // for e.returnvalue 41 | ] 42 | }], 43 | // allow optionalDependencies 44 | 'import/no-extraneous-dependencies': ['error', { 45 | optionalDependencies: ['test/unit/index.js'] 46 | }], 47 | // allow debugger during development 48 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off' 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | npm-debug.log* 4 | yarn-debug.log* 5 | yarn-error.log* 6 | 7 | # Editor directories and files 8 | .idea 9 | .vscode 10 | *.suo 11 | *.ntvs* 12 | *.njsproj 13 | *.sln 14 | -------------------------------------------------------------------------------- /.postcssrc.js: -------------------------------------------------------------------------------- 1 | // https://github.com/michael-ciniawsky/postcss-load-config 2 | 3 | module.exports = { 4 | "plugins": { 5 | "postcss-import": {}, 6 | "postcss-url": {}, 7 | // to edit target browsers: use "browserslist" field in package.json 8 | "autoprefixer": {} 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # vue-cart 2 | 3 | > A Vue.js project 4 | > This project was made using vue, vuex and vue-router. 5 | 6 | ### https://crisgon.github.io/vue-cart/dist/ 7 | 8 | ![Shop Cart](https://i.imgur.com/yKYJdV3.gif) 9 | 10 | ## Build Setup 11 | 12 | ``` bash 13 | # install dependencies 14 | npm install 15 | 16 | # serve with hot reload at localhost:8080 17 | npm run dev 18 | 19 | # build for production with minification 20 | npm run build 21 | 22 | # build for production and view the bundle analyzer report 23 | npm run build --report 24 | ``` 25 | 26 | For a detailed explanation on how things work, check out the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader). 27 | -------------------------------------------------------------------------------- /build/build.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | require('./check-versions')() 3 | 4 | process.env.NODE_ENV = 'production' 5 | 6 | const ora = require('ora') 7 | const rm = require('rimraf') 8 | const path = require('path') 9 | const chalk = require('chalk') 10 | const webpack = require('webpack') 11 | const config = require('../config') 12 | const webpackConfig = require('./webpack.prod.conf') 13 | 14 | const spinner = ora('building for production...') 15 | spinner.start() 16 | 17 | rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => { 18 | if (err) throw err 19 | webpack(webpackConfig, (err, stats) => { 20 | spinner.stop() 21 | if (err) throw err 22 | process.stdout.write(stats.toString({ 23 | colors: true, 24 | modules: false, 25 | children: false, // If you are using ts-loader, setting this to true will make TypeScript errors show up during build. 26 | chunks: false, 27 | chunkModules: false 28 | }) + '\n\n') 29 | 30 | if (stats.hasErrors()) { 31 | console.log(chalk.red(' Build failed with errors.\n')) 32 | process.exit(1) 33 | } 34 | 35 | console.log(chalk.cyan(' Build complete.\n')) 36 | console.log(chalk.yellow( 37 | ' Tip: built files are meant to be served over an HTTP server.\n' + 38 | ' Opening index.html over file:// won\'t work.\n' 39 | )) 40 | }) 41 | }) 42 | -------------------------------------------------------------------------------- /build/check-versions.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const chalk = require('chalk') 3 | const semver = require('semver') 4 | const packageConfig = require('../package.json') 5 | const shell = require('shelljs') 6 | 7 | function exec (cmd) { 8 | return require('child_process').execSync(cmd).toString().trim() 9 | } 10 | 11 | const versionRequirements = [ 12 | { 13 | name: 'node', 14 | currentVersion: semver.clean(process.version), 15 | versionRequirement: packageConfig.engines.node 16 | } 17 | ] 18 | 19 | if (shell.which('npm')) { 20 | versionRequirements.push({ 21 | name: 'npm', 22 | currentVersion: exec('npm --version'), 23 | versionRequirement: packageConfig.engines.npm 24 | }) 25 | } 26 | 27 | module.exports = function () { 28 | const warnings = [] 29 | 30 | for (let i = 0; i < versionRequirements.length; i++) { 31 | const mod = versionRequirements[i] 32 | 33 | if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) { 34 | warnings.push(mod.name + ': ' + 35 | chalk.red(mod.currentVersion) + ' should be ' + 36 | chalk.green(mod.versionRequirement) 37 | ) 38 | } 39 | } 40 | 41 | if (warnings.length) { 42 | console.log('') 43 | console.log(chalk.yellow('To use this template, you must update following to modules:')) 44 | console.log() 45 | 46 | for (let i = 0; i < warnings.length; i++) { 47 | const warning = warnings[i] 48 | console.log(' ' + warning) 49 | } 50 | 51 | console.log() 52 | process.exit(1) 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /build/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crisgon/vue-cart/c7bb886f6133ff8f950de2555558b0ed4950db76/build/logo.png -------------------------------------------------------------------------------- /build/utils.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const path = require('path') 3 | const config = require('../config') 4 | const ExtractTextPlugin = require('extract-text-webpack-plugin') 5 | const packageConfig = require('../package.json') 6 | 7 | exports.assetsPath = function (_path) { 8 | const assetsSubDirectory = process.env.NODE_ENV === 'production' 9 | ? config.build.assetsSubDirectory 10 | : config.dev.assetsSubDirectory 11 | 12 | return path.posix.join(assetsSubDirectory, _path) 13 | } 14 | 15 | exports.cssLoaders = function (options) { 16 | options = options || {} 17 | 18 | const cssLoader = { 19 | loader: 'css-loader', 20 | options: { 21 | sourceMap: options.sourceMap 22 | } 23 | } 24 | 25 | const postcssLoader = { 26 | loader: 'postcss-loader', 27 | options: { 28 | sourceMap: options.sourceMap 29 | } 30 | } 31 | 32 | // generate loader string to be used with extract text plugin 33 | function generateLoaders (loader, loaderOptions) { 34 | const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader] 35 | 36 | if (loader) { 37 | loaders.push({ 38 | loader: loader + '-loader', 39 | options: Object.assign({}, loaderOptions, { 40 | sourceMap: options.sourceMap 41 | }) 42 | }) 43 | } 44 | 45 | // Extract CSS when that option is specified 46 | // (which is the case during production build) 47 | if (options.extract) { 48 | return ExtractTextPlugin.extract({ 49 | use: loaders, 50 | fallback: 'vue-style-loader' 51 | }) 52 | } else { 53 | return ['vue-style-loader'].concat(loaders) 54 | } 55 | } 56 | 57 | // https://vue-loader.vuejs.org/en/configurations/extract-css.html 58 | return { 59 | css: generateLoaders(), 60 | postcss: generateLoaders(), 61 | less: generateLoaders('less'), 62 | sass: generateLoaders('sass', { indentedSyntax: true }), 63 | scss: generateLoaders('sass'), 64 | stylus: generateLoaders('stylus'), 65 | styl: generateLoaders('stylus') 66 | } 67 | } 68 | 69 | // Generate loaders for standalone style files (outside of .vue) 70 | exports.styleLoaders = function (options) { 71 | const output = [] 72 | const loaders = exports.cssLoaders(options) 73 | 74 | for (const extension in loaders) { 75 | const loader = loaders[extension] 76 | output.push({ 77 | test: new RegExp('\\.' + extension + '$'), 78 | use: loader 79 | }) 80 | } 81 | 82 | return output 83 | } 84 | 85 | exports.createNotifierCallback = () => { 86 | const notifier = require('node-notifier') 87 | 88 | return (severity, errors) => { 89 | if (severity !== 'error') return 90 | 91 | const error = errors[0] 92 | const filename = error.file && error.file.split('!').pop() 93 | 94 | notifier.notify({ 95 | title: packageConfig.name, 96 | message: severity + ': ' + error.name, 97 | subtitle: filename || '', 98 | icon: path.join(__dirname, 'logo.png') 99 | }) 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /build/vue-loader.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const utils = require('./utils') 3 | const config = require('../config') 4 | const isProduction = process.env.NODE_ENV === 'production' 5 | const sourceMapEnabled = isProduction 6 | ? config.build.productionSourceMap 7 | : config.dev.cssSourceMap 8 | 9 | module.exports = { 10 | loaders: utils.cssLoaders({ 11 | sourceMap: sourceMapEnabled, 12 | extract: isProduction 13 | }), 14 | cssSourceMap: sourceMapEnabled, 15 | cacheBusting: config.dev.cacheBusting, 16 | transformToRequire: { 17 | video: ['src', 'poster'], 18 | source: 'src', 19 | img: 'src', 20 | image: 'xlink:href' 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /build/webpack.base.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const path = require('path') 3 | const utils = require('./utils') 4 | const config = require('../config') 5 | const vueLoaderConfig = require('./vue-loader.conf') 6 | 7 | function resolve (dir) { 8 | return path.join(__dirname, '..', dir) 9 | } 10 | 11 | const createLintingRule = () => ({ 12 | test: /\.(js|vue)$/, 13 | loader: 'eslint-loader', 14 | enforce: 'pre', 15 | include: [resolve('src'), resolve('test')], 16 | options: { 17 | formatter: require('eslint-friendly-formatter'), 18 | emitWarning: !config.dev.showEslintErrorsInOverlay 19 | } 20 | }) 21 | 22 | module.exports = { 23 | context: path.resolve(__dirname, '../'), 24 | entry: { 25 | app: './src/main.js' 26 | }, 27 | output: { 28 | path: config.build.assetsRoot, 29 | filename: '[name].js', 30 | publicPath: process.env.NODE_ENV === 'production' 31 | ? config.build.assetsPublicPath 32 | : config.dev.assetsPublicPath 33 | }, 34 | resolve: { 35 | extensions: ['.js', '.vue', '.json'], 36 | alias: { 37 | 'vue$': 'vue/dist/vue.esm.js', 38 | '@': resolve('src'), 39 | } 40 | }, 41 | module: { 42 | rules: [ 43 | ...(config.dev.useEslint ? [createLintingRule()] : []), 44 | { 45 | test: /\.vue$/, 46 | loader: 'vue-loader', 47 | options: vueLoaderConfig 48 | }, 49 | { 50 | test: /\.js$/, 51 | loader: 'babel-loader', 52 | include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')] 53 | }, 54 | { 55 | test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, 56 | loader: 'url-loader', 57 | options: { 58 | limit: 10000, 59 | name: utils.assetsPath('img/[name].[hash:7].[ext]') 60 | } 61 | }, 62 | { 63 | test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/, 64 | loader: 'url-loader', 65 | options: { 66 | limit: 10000, 67 | name: utils.assetsPath('media/[name].[hash:7].[ext]') 68 | } 69 | }, 70 | { 71 | test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, 72 | loader: 'url-loader', 73 | options: { 74 | limit: 10000, 75 | name: utils.assetsPath('fonts/[name].[hash:7].[ext]') 76 | } 77 | } 78 | ] 79 | }, 80 | node: { 81 | // prevent webpack from injecting useless setImmediate polyfill because Vue 82 | // source contains it (although only uses it if it's native). 83 | setImmediate: false, 84 | // prevent webpack from injecting mocks to Node native modules 85 | // that does not make sense for the client 86 | dgram: 'empty', 87 | fs: 'empty', 88 | net: 'empty', 89 | tls: 'empty', 90 | child_process: 'empty' 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /build/webpack.dev.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const utils = require('./utils') 3 | const webpack = require('webpack') 4 | const config = require('../config') 5 | const merge = require('webpack-merge') 6 | const path = require('path') 7 | const baseWebpackConfig = require('./webpack.base.conf') 8 | const CopyWebpackPlugin = require('copy-webpack-plugin') 9 | const HtmlWebpackPlugin = require('html-webpack-plugin') 10 | const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin') 11 | const portfinder = require('portfinder') 12 | 13 | const HOST = process.env.HOST 14 | const PORT = process.env.PORT && Number(process.env.PORT) 15 | 16 | const devWebpackConfig = merge(baseWebpackConfig, { 17 | module: { 18 | rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, usePostCSS: true }) 19 | }, 20 | // cheap-module-eval-source-map is faster for development 21 | devtool: config.dev.devtool, 22 | 23 | // these devServer options should be customized in /config/index.js 24 | devServer: { 25 | clientLogLevel: 'warning', 26 | historyApiFallback: { 27 | rewrites: [ 28 | { from: /.*/, to: path.posix.join(config.dev.assetsPublicPath, 'index.html') }, 29 | ], 30 | }, 31 | hot: true, 32 | contentBase: false, // since we use CopyWebpackPlugin. 33 | compress: true, 34 | host: HOST || config.dev.host, 35 | port: PORT || config.dev.port, 36 | open: config.dev.autoOpenBrowser, 37 | overlay: config.dev.errorOverlay 38 | ? { warnings: false, errors: true } 39 | : false, 40 | publicPath: config.dev.assetsPublicPath, 41 | proxy: config.dev.proxyTable, 42 | quiet: true, // necessary for FriendlyErrorsPlugin 43 | watchOptions: { 44 | poll: config.dev.poll, 45 | } 46 | }, 47 | plugins: [ 48 | new webpack.DefinePlugin({ 49 | 'process.env': require('../config/dev.env') 50 | }), 51 | new webpack.HotModuleReplacementPlugin(), 52 | new webpack.NamedModulesPlugin(), // HMR shows correct file names in console on update. 53 | new webpack.NoEmitOnErrorsPlugin(), 54 | // https://github.com/ampedandwired/html-webpack-plugin 55 | new HtmlWebpackPlugin({ 56 | filename: 'index.html', 57 | template: 'index.html', 58 | inject: true 59 | }), 60 | // copy custom static assets 61 | new CopyWebpackPlugin([ 62 | { 63 | from: path.resolve(__dirname, '../static'), 64 | to: config.dev.assetsSubDirectory, 65 | ignore: ['.*'] 66 | } 67 | ]) 68 | ] 69 | }) 70 | 71 | module.exports = new Promise((resolve, reject) => { 72 | portfinder.basePort = process.env.PORT || config.dev.port 73 | portfinder.getPort((err, port) => { 74 | if (err) { 75 | reject(err) 76 | } else { 77 | // publish the new Port, necessary for e2e tests 78 | process.env.PORT = port 79 | // add port to devServer config 80 | devWebpackConfig.devServer.port = port 81 | 82 | // Add FriendlyErrorsPlugin 83 | devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({ 84 | compilationSuccessInfo: { 85 | messages: [`Your application is running here: http://${devWebpackConfig.devServer.host}:${port}`], 86 | }, 87 | onErrors: config.dev.notifyOnErrors 88 | ? utils.createNotifierCallback() 89 | : undefined 90 | })) 91 | 92 | resolve(devWebpackConfig) 93 | } 94 | }) 95 | }) 96 | -------------------------------------------------------------------------------- /build/webpack.prod.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const path = require('path') 3 | const utils = require('./utils') 4 | const webpack = require('webpack') 5 | const config = require('../config') 6 | const merge = require('webpack-merge') 7 | const baseWebpackConfig = require('./webpack.base.conf') 8 | const CopyWebpackPlugin = require('copy-webpack-plugin') 9 | const HtmlWebpackPlugin = require('html-webpack-plugin') 10 | const ExtractTextPlugin = require('extract-text-webpack-plugin') 11 | const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin') 12 | const UglifyJsPlugin = require('uglifyjs-webpack-plugin') 13 | 14 | const env = require('../config/prod.env') 15 | 16 | const webpackConfig = merge(baseWebpackConfig, { 17 | module: { 18 | rules: utils.styleLoaders({ 19 | sourceMap: config.build.productionSourceMap, 20 | extract: true, 21 | usePostCSS: true 22 | }) 23 | }, 24 | devtool: config.build.productionSourceMap ? config.build.devtool : false, 25 | output: { 26 | path: config.build.assetsRoot, 27 | filename: utils.assetsPath('js/[name].[chunkhash].js'), 28 | chunkFilename: utils.assetsPath('js/[id].[chunkhash].js') 29 | }, 30 | plugins: [ 31 | // http://vuejs.github.io/vue-loader/en/workflow/production.html 32 | new webpack.DefinePlugin({ 33 | 'process.env': env 34 | }), 35 | new UglifyJsPlugin({ 36 | uglifyOptions: { 37 | compress: { 38 | warnings: false 39 | } 40 | }, 41 | sourceMap: config.build.productionSourceMap, 42 | parallel: true 43 | }), 44 | // extract css into its own file 45 | new ExtractTextPlugin({ 46 | filename: utils.assetsPath('css/[name].[contenthash].css'), 47 | // Setting the following option to `false` will not extract CSS from codesplit chunks. 48 | // Their CSS will instead be inserted dynamically with style-loader when the codesplit chunk has been loaded by webpack. 49 | // It's currently set to `true` because we are seeing that sourcemaps are included in the codesplit bundle as well when it's `false`, 50 | // increasing file size: https://github.com/vuejs-templates/webpack/issues/1110 51 | allChunks: true, 52 | }), 53 | // Compress extracted CSS. We are using this plugin so that possible 54 | // duplicated CSS from different components can be deduped. 55 | new OptimizeCSSPlugin({ 56 | cssProcessorOptions: config.build.productionSourceMap 57 | ? { safe: true, map: { inline: false } } 58 | : { safe: true } 59 | }), 60 | // generate dist index.html with correct asset hash for caching. 61 | // you can customize output by editing /index.html 62 | // see https://github.com/ampedandwired/html-webpack-plugin 63 | new HtmlWebpackPlugin({ 64 | filename: config.build.index, 65 | template: 'index.html', 66 | inject: true, 67 | minify: { 68 | removeComments: true, 69 | collapseWhitespace: true, 70 | removeAttributeQuotes: true 71 | // more options: 72 | // https://github.com/kangax/html-minifier#options-quick-reference 73 | }, 74 | // necessary to consistently work with multiple chunks via CommonsChunkPlugin 75 | chunksSortMode: 'dependency' 76 | }), 77 | // keep module.id stable when vendor modules does not change 78 | new webpack.HashedModuleIdsPlugin(), 79 | // enable scope hoisting 80 | new webpack.optimize.ModuleConcatenationPlugin(), 81 | // split vendor js into its own file 82 | new webpack.optimize.CommonsChunkPlugin({ 83 | name: 'vendor', 84 | minChunks (module) { 85 | // any required modules inside node_modules are extracted to vendor 86 | return ( 87 | module.resource && 88 | /\.js$/.test(module.resource) && 89 | module.resource.indexOf( 90 | path.join(__dirname, '../node_modules') 91 | ) === 0 92 | ) 93 | } 94 | }), 95 | // extract webpack runtime and module manifest to its own file in order to 96 | // prevent vendor hash from being updated whenever app bundle is updated 97 | new webpack.optimize.CommonsChunkPlugin({ 98 | name: 'manifest', 99 | minChunks: Infinity 100 | }), 101 | // This instance extracts shared chunks from code splitted chunks and bundles them 102 | // in a separate chunk, similar to the vendor chunk 103 | // see: https://webpack.js.org/plugins/commons-chunk-plugin/#extra-async-commons-chunk 104 | new webpack.optimize.CommonsChunkPlugin({ 105 | name: 'app', 106 | async: 'vendor-async', 107 | children: true, 108 | minChunks: 3 109 | }), 110 | 111 | // copy custom static assets 112 | new CopyWebpackPlugin([ 113 | { 114 | from: path.resolve(__dirname, '../static'), 115 | to: config.build.assetsSubDirectory, 116 | ignore: ['.*'] 117 | } 118 | ]) 119 | ] 120 | }) 121 | 122 | if (config.build.productionGzip) { 123 | const CompressionWebpackPlugin = require('compression-webpack-plugin') 124 | 125 | webpackConfig.plugins.push( 126 | new CompressionWebpackPlugin({ 127 | asset: '[path].gz[query]', 128 | algorithm: 'gzip', 129 | test: new RegExp( 130 | '\\.(' + 131 | config.build.productionGzipExtensions.join('|') + 132 | ')$' 133 | ), 134 | threshold: 10240, 135 | minRatio: 0.8 136 | }) 137 | ) 138 | } 139 | 140 | if (config.build.bundleAnalyzerReport) { 141 | const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin 142 | webpackConfig.plugins.push(new BundleAnalyzerPlugin()) 143 | } 144 | 145 | module.exports = webpackConfig 146 | -------------------------------------------------------------------------------- /config/dev.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const merge = require('webpack-merge') 3 | const prodEnv = require('./prod.env') 4 | 5 | module.exports = merge(prodEnv, { 6 | NODE_ENV: '"development"' 7 | }) 8 | -------------------------------------------------------------------------------- /config/index.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | // Template version: 1.3.1 3 | // see http://vuejs-templates.github.io/webpack for documentation. 4 | 5 | const path = require('path') 6 | 7 | module.exports = { 8 | dev: { 9 | 10 | // Paths 11 | assetsSubDirectory: 'static', 12 | assetsPublicPath: '/', 13 | proxyTable: {}, 14 | 15 | // Various Dev Server settings 16 | host: 'localhost', // can be overwritten by process.env.HOST 17 | port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined 18 | autoOpenBrowser: false, 19 | errorOverlay: true, 20 | notifyOnErrors: true, 21 | poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions- 22 | 23 | // Use Eslint Loader? 24 | // If true, your code will be linted during bundling and 25 | // linting errors and warnings will be shown in the console. 26 | useEslint: true, 27 | // If true, eslint errors and warnings will also be shown in the error overlay 28 | // in the browser. 29 | showEslintErrorsInOverlay: false, 30 | 31 | /** 32 | * Source Maps 33 | */ 34 | 35 | // https://webpack.js.org/configuration/devtool/#development 36 | devtool: 'cheap-module-eval-source-map', 37 | 38 | // If you have problems debugging vue-files in devtools, 39 | // set this to false - it *may* help 40 | // https://vue-loader.vuejs.org/en/options.html#cachebusting 41 | cacheBusting: true, 42 | 43 | cssSourceMap: true 44 | }, 45 | 46 | build: { 47 | // Template for index.html 48 | index: path.resolve(__dirname, '../dist/index.html'), 49 | 50 | // Paths 51 | assetsRoot: path.resolve(__dirname, '../dist'), 52 | assetsSubDirectory: 'static', 53 | assetsPublicPath: 'https://crisgon.github.io/vue-cart/dist/', 54 | 55 | /** 56 | * Source Maps 57 | */ 58 | 59 | productionSourceMap: true, 60 | // https://webpack.js.org/configuration/devtool/#production 61 | devtool: '#source-map', 62 | 63 | // Gzip off by default as many popular static hosts such as 64 | // Surge or Netlify already gzip all static assets for you. 65 | // Before setting to `true`, make sure to: 66 | // npm install --save-dev compression-webpack-plugin 67 | productionGzip: false, 68 | productionGzipExtensions: ['js', 'css'], 69 | 70 | // Run the build command with an extra argument to 71 | // View the bundle analyzer report after build finishes: 72 | // `npm run build --report` 73 | // Set to `true` or `false` to always turn it on or off 74 | bundleAnalyzerReport: process.env.npm_config_report 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /config/prod.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | module.exports = { 3 | NODE_ENV: '"production"' 4 | } 5 | -------------------------------------------------------------------------------- /dist/index.html: -------------------------------------------------------------------------------- 1 | vue-cart
-------------------------------------------------------------------------------- /dist/static/css/app.cb9d69e9d64b994d48bae8c4859415a4.css: -------------------------------------------------------------------------------- 1 | @import url(https://fonts.googleapis.com/css?family=Roboto); 2 | /*! normalize.css v8.0.0 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}body{font-family:Roboto,sans-serif;background-color:#fafafa}a{color:#000;text-decoration:none}.container{width:100%}.cart{position:absolute;top:75px;right:300px}.btn-circle{width:25px;height:25px;border-radius:50%;position:absolute;top:-5px;right:-5px;background-color:#fff;color:#000;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.leave-enter-active,.leave-leave-active{transition:all 1.2s}.leave-enter,.leave-leave-to{opacity:0;transform:translateX(-50%)}.appear-enter-active{animation:appear-animation .5s}.appear-leave-active{animation:appear-animation .5s reverse}@keyframes appear-animation{0%{transform:translateY(-50%);opacity:0}to{transform:translateY(0);opacity:1}}.header[data-v-ecc5ec8a]{width:100%;height:70px;background-color:#333;box-sizing:border-box;padding:.5em;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center}.nav[data-v-ecc5ec8a]{width:600px}.nav-links[data-v-ecc5ec8a]{width:100%;display:-ms-flexbox;display:flex;-ms-flex-pack:start;justify-content:flex-start}.link[data-v-ecc5ec8a]{list-style:none;padding:0 2em}.link a[data-v-ecc5ec8a]{color:#fff;text-decoration:none}.btn[data-v-a61d3696]{border:0;cursor:pointer;box-sizing:border-box;border-radius:3px;color:#fff;display:-ms-flexbox;display:flex;-ms-flex-pack:distribute;justify-content:space-around;position:relative}.btn-small[data-v-a61d3696]{padding:.5em 2em}.btn-medium[data-v-a61d3696]{padding:.7em 4.5em}.btn-large[data-v-a61d3696]{padding:.7em 5em}.btn-info[data-v-a61d3696]{background-color:#2d9cdb}.btn-sucess[data-v-a61d3696]{background-color:#27ae60}.btn-danger[data-v-a61d3696]{background-color:#e74c3c}.btn img[data-v-a61d3696]{max-width:20px;margin-left:.5em}.box[data-v-3d02a006]{width:400px;height:auto;background-color:#fafafa;box-shadow:0 0 10px rgba(73,74,78,.1);border-radius:5px;box-sizing:border-box;padding:1em .5em;position:absolute;z-index:1}.box[data-v-3d02a006]:after{content:"";width:30px;height:30px;transform:rotate(45deg);background:inherit;position:absolute;top:-15px;right:15px}.box-item[data-v-3d02a006]{width:100%;height:130px;background-color:#fff;box-sizing:border-box;border-radius:3px;padding:0 .5em;margin-top:.3em;display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(3,1fr)}.item-thumb[data-v-3d02a006]{max-width:70%;grid-column:1/2;grid-row:1/4;-ms-flex-item-align:center;align-self:center}.item-name[data-v-3d02a006]{grid-column:2/4;grid-row:1/2;font-weight:400}.item-amount[data-v-3d02a006]{grid-column:2/3;grid-row:2/4;color:#ddd}.cart-info[data-v-3d02a006]{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-align:center;align-items:center}.mask[data-v-516c02ef]{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);width:100%;height:100%;background-color:rgba(0,0,0,.5)}.listOfProducts[data-v-85fa0bf0]{width:100%;max-width:1000px;margin:0 auto;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:distribute;justify-content:space-around;padding:0}.product[data-v-85fa0bf0]{width:300px;background-color:#fff;list-style:none;box-sizing:border-box;padding:1em;margin:1em 0;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-align:center;align-items:center;border-radius:7px}.product-name[data-v-85fa0bf0]{font-size:1.2em;font-weight:400}.product-price[data-v-85fa0bf0]{width:100%;-ms-flex-item-align:start;align-self:flex-start;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:.5em}.listOfProducts[data-v-43c41760]{width:100%;max-width:1000px;margin:0 auto;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:distribute;justify-content:space-around;padding:0}.product[data-v-43c41760]{width:300px;background-color:#fff;list-style:none;box-sizing:border-box;padding:1em;margin:1em 0;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-align:center;align-items:center;border-radius:7px}.product-name[data-v-43c41760]{font-size:1.2em;font-weight:400}.product-name[data-v-43c41760]:hover{cursor:pointer;text-decoration:underline}.product-price[data-v-43c41760]{width:100%;-ms-flex-item-align:start;align-self:flex-start;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:.5em}.product-box[data-v-7efdfc57]{width:800px;height:400px;margin:50px auto;box-sizing:border-box;padding:1.5em;background-color:#fff;border-radius:7px;display:-ms-flexbox;display:flex;-ms-flex-pack:distribute;justify-content:space-around;-ms-flex-align:center;align-items:center}.product-image[data-v-7efdfc57]{width:300px}.product-info[data-v-7efdfc57]{width:400px;-ms-flex-item-align:start;align-self:flex-start}.product-title[data-v-7efdfc57]{font-weight:400}.product-price[data-v-7efdfc57]{font-size:2em;font-weight:bolder}.product-box button[data-v-7efdfc57]{width:300px;margin:.3em 0}.stars-box[data-v-5147e0a8]{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.stars[data-v-5147e0a8]{width:80%}.star-bg[data-v-5147e0a8]{fill:#c4c4c4}.star-fill[data-v-5147e0a8]{fill:#f2c94c}.star-path[data-v-5147e0a8]{fill:#fff}.total-stars[data-v-5147e0a8]{box-sizing:border-box;padding:.5em 0}.modal[data-v-44910ab4]{width:100%;max-width:500px;height:300px;box-sizing:border-box;padding:1em;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background-color:#fff;box-shadow:0 0 10px hsla(0,0%,56%,.2);border:0;border-radius:5px;line-height:1.5em;opacity:1;transition:all .5s;z-index:1}.modal button[data-v-44910ab4]{position:absolute;bottom:10px;right:10px}.fade-enter-active[data-v-44910ab4],.fade-leave-active[data-v-44910ab4]{transition:all .7s}.fade-enter[data-v-44910ab4],.fade-leave-to[data-v-44910ab4]{opacity:0}.checkout-box[data-v-fb8b6cda]{width:100%;max-width:900px;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;margin:50px auto;box-sizing:border-box;padding:1em}.checkout-list[data-v-fb8b6cda]{padding:0}.checkout-product[data-v-fb8b6cda]{display:grid;grid-template-columns:1fr 3fr 2fr .5fr;background-color:#fff;box-shadow:0 0 10px rgba(73,74,78,.1);border-radius:5px;list-style:none;box-sizing:border-box;padding:.8em;margin:1em 0}.checkout-product [data-v-fb8b6cda]{place-self:center}.product-image[data-v-fb8b6cda]{grid-column:1/2;width:50%}.product-name[data-v-fb8b6cda]{box-sizing:border-box}.product-price[data-v-fb8b6cda]{font-size:1.2em;font-weight:700}.product-remove[data-v-fb8b6cda]{width:25px;height:25px;border-radius:50%;border:0;background-color:#e0e0e0;color:#fff;cursor:pointer}.total[data-v-fb8b6cda]{font-size:2em;font-weight:700;-ms-flex-item-align:end;align-self:flex-end}.checkout-message[data-v-fb8b6cda]{font-size:1.5em}.fade-enter-active[data-v-fb8b6cda],.fade-leave-active[data-v-fb8b6cda]{transition:all .5s}.fade-enter[data-v-fb8b6cda],.fade-leave-to[data-v-fb8b6cda]{transform:translateX(-40px);opacity:0} 3 | /*# sourceMappingURL=app.cb9d69e9d64b994d48bae8c4859415a4.css.map */ -------------------------------------------------------------------------------- /dist/static/css/app.cb9d69e9d64b994d48bae8c4859415a4.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["app.cb9d69e9d64b994d48bae8c4859415a4.css"],"names":[],"mappings":"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","file":"app.cb9d69e9d64b994d48bae8c4859415a4.css","sourcesContent":["@import url(https://fonts.googleapis.com/css?family=Roboto);\n/*! normalize.css v8.0.0 | MIT License | github.com/necolas/normalize.css */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/* Document\n ========================================================================== */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in iOS.\n */\nhtml {\n line-height: 1.15; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/* Sections\n ========================================================================== */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Remove the margin in all browsers.\n */\nbody {\n margin: 0;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/* Grouping content\n ========================================================================== */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\nhr {\n -webkit-box-sizing: content-box;\n box-sizing: content-box; /* 1 */\n height: 0; /* 1 */\n overflow: visible; /* 2 */\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\npre {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/* Text-level semantics\n ========================================================================== */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Remove the gray background on active links in IE 10.\n */\na {\n background-color: transparent;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * 1. Remove the bottom border in Chrome 57-\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\nabbr[title] {\n border-bottom: none; /* 1 */\n text-decoration: underline; /* 2 */\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted; /* 2 */\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\nb,\nstrong {\n font-weight: bolder;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Add the correct font size in all browsers.\n */\nsmall {\n font-size: 80%;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\nsub {\n bottom: -0.25em;\n}\nsup {\n top: -0.5em;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/* Embedded content\n ========================================================================== */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Remove the border on images inside links in IE 10.\n */\nimg {\n border-style: none;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/* Forms\n ========================================================================== */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * 1. Change the font styles in all browsers.\n * 2. Remove the margin in Firefox and Safari.\n */\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\nbutton,\ninput { /* 1 */\n overflow: visible;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\nbutton,\nselect { /* 1 */\n text-transform: none;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Correct the inability to style clickable types in iOS and Safari.\n */\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Remove the inner border and padding in Firefox.\n */\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Correct the padding in Firefox.\n */\nfieldset {\n padding: 0.35em 0.75em 0.625em;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * `fieldset` elements in all browsers.\n */\nlegend {\n -webkit-box-sizing: border-box;\n box-sizing: border-box; /* 1 */\n color: inherit; /* 2 */\n display: table; /* 1 */\n max-width: 100%; /* 1 */\n padding: 0; /* 3 */\n white-space: normal; /* 1 */\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\nprogress {\n vertical-align: baseline;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Remove the default vertical scrollbar in IE 10+.\n */\ntextarea {\n overflow: auto;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * 1. Add the correct box sizing in IE 10.\n * 2. Remove the padding in IE 10.\n */\n[type=\"checkbox\"],\n[type=\"radio\"] {\n -webkit-box-sizing: border-box;\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n[type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Remove the inner padding in Chrome and Safari on macOS.\n */\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/* Interactive\n ========================================================================== */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/*\n * Add the correct display in Edge, IE 10+, and Firefox.\n */\ndetails {\n display: block;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/*\n * Add the correct display in all browsers.\n */\nsummary {\n display: list-item;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/* Misc\n ========================================================================== */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Add the correct display in IE 10+.\n */\ntemplate {\n display: none;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Add the correct display in IE 10.\n */\n[hidden] {\n display: none;\n}\nbody {\n font-family: 'Roboto', sans-serif;\n background-color: #FAFAFA;\n}\na {\n color: #000;\n text-decoration: none;\n}\n.container {\n width: 100%;\n}\n.cart {\n position: absolute;\n top: 75px;\n right: 300px;\n}\n.btn-circle {\n width: 25px;\n height: 25px;\n border-radius: 50%;\n position: absolute;\n top: -5px;\n right: -5px;\n background-color: #fff;\n color: #000;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n}\n.leave-enter-active, .leave-leave-active {\n -webkit-transition: all 1.2s;\n transition: all 1.2s;\n}\n.leave-enter, .leave-leave-to {\n opacity: 0;\n -webkit-transform: translateX(-50%);\n transform: translateX(-50%);\n}\n.appear-enter-active {\n -webkit-animation: appear-animation .5s;\n animation: appear-animation .5s;\n}\n.appear-leave-active {\n animation: appear-animation .5s reverse;\n}\n@-webkit-keyframes appear-animation {\n0% {\n -webkit-transform: translateY(-50%);\n transform: translateY(-50%);\n opacity: 0;\n}\n100% {\n -webkit-transform: translateY(0%);\n transform: translateY(0%);\n opacity: 1;\n}\n}\n@keyframes appear-animation {\n0% {\n -webkit-transform: translateY(-50%);\n transform: translateY(-50%);\n opacity: 0;\n}\n100% {\n -webkit-transform: translateY(0%);\n transform: translateY(0%);\n opacity: 1;\n}\n}\n\n.header[data-v-ecc5ec8a] {\n width: 100%;\n height: 70px;\n background-color: #333333;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n padding: .5em;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n}\n.nav[data-v-ecc5ec8a] {\n width: 600px;\n}\n.nav-links[data-v-ecc5ec8a] {\n width: 100%;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-pack: start;\n -ms-flex-pack: start;\n justify-content: flex-start;\n}\n.link[data-v-ecc5ec8a] {\n list-style: none;\n padding: 0 2em;\n}\n.link a[data-v-ecc5ec8a] {\n color: #fff;\n text-decoration: none;\n}\n\n.btn[data-v-a61d3696] {\n border: 0;\n cursor: pointer;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n border-radius: 3px;\n color: #fff;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-pack: distribute;\n justify-content: space-around;\n position: relative;\n}\n.btn-small[data-v-a61d3696] {\n padding: .5em 2em;\n}\n.btn-medium[data-v-a61d3696] {\n padding: .7em 4.5em;\n}\n.btn-large[data-v-a61d3696] {\n padding: .7em 5em;\n}\n.btn-info[data-v-a61d3696] {\n background-color: #2D9CDB;\n}\n.btn-sucess[data-v-a61d3696] {\n background-color: #27AE60;\n}\n.btn-danger[data-v-a61d3696] {\n background-color: #e74c3c;\n}\n.btn img[data-v-a61d3696] {\n max-width: 20px;\n margin-left: .5em;\n}\n\n\n.box[data-v-3d02a006] {\n width: 400px;\n height: auto;\n background-color: #FAFAFA;\n -webkit-box-shadow: 0px 0px 10px rgba(73, 74, 78, 0.1);\n box-shadow: 0px 0px 10px rgba(73, 74, 78, 0.1);\n border-radius: 5px;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n padding: 1em .5em;\n position: absolute;\n z-index: 1;\n}\n.box[data-v-3d02a006]:after {\n content: '';\n width: 30px;\n height: 30px;\n -webkit-transform: rotate(45deg);\n transform: rotate(45deg);\n background: inherit;\n position: absolute;\n top: -15px;\n right: 15px;\n}\n.box-item[data-v-3d02a006] {\n width: 100%;\n height: 130px;\n background-color: #fff;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n border-radius: 3px;\n padding: 0 .5em;\n margin-top: .3em;\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n grid-template-rows: repeat(3, 1fr);\n}\n.item-thumb[data-v-3d02a006] {\n max-width: 70%;\n grid-column: 1/2;\n grid-row: 1/4;\n -ms-flex-item-align: center;\n align-self: center;\n}\n.item-name[data-v-3d02a006] {\n grid-column: 2/4;\n grid-row: 1/2;\n font-weight: normal;\n}\n.item-amount[data-v-3d02a006] {\n grid-column: 2/3;\n grid-row: 2/4;\n color: #ddd;\n}\n.cart-info[data-v-3d02a006] {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-pack: justify;\n -ms-flex-pack: justify;\n justify-content: space-between;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n}\n\n\n.mask[data-v-516c02ef] {\n position: fixed;\n top: 50%;\n left: 50%;\n -webkit-transform: translate(-50%, -50%);\n transform: translate(-50%, -50%);\n width: 100%;\n height: 100%;\n background-color: rgba(0,0,0,.5);\n}\n\n.listOfProducts[data-v-85fa0bf0] {\n width: 100%;\n max-width: 1000px;\n margin: 0 auto;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n -ms-flex-pack: distribute;\n justify-content: space-around;\n padding: 0;\n}\n.product[data-v-85fa0bf0] {\n width: 300px;\n background-color: #fff;\n list-style: none;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n padding: 1em;\n margin: 1em 0;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: vertical;\n -webkit-box-direction: normal;\n -ms-flex-direction: column;\n flex-direction: column;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n border-radius: 7px;\n}\n.product-name[data-v-85fa0bf0] {\n font-size: 1.2em;\n font-weight: normal;\n}\n.product-price[data-v-85fa0bf0] {\n width: 100%;\n -ms-flex-item-align: start;\n align-self: flex-start;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-pack: justify;\n -ms-flex-pack: justify;\n justify-content: space-between;\n margin-bottom: .5em;\n}\n\n\n.listOfProducts[data-v-43c41760] {\n width: 100%;\n max-width: 1000px;\n margin: 0 auto;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n -ms-flex-pack: distribute;\n justify-content: space-around;\n padding: 0;\n}\n.product[data-v-43c41760] {\n width: 300px;\n background-color: #fff;\n list-style: none;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n padding: 1em;\n margin: 1em 0;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: vertical;\n -webkit-box-direction: normal;\n -ms-flex-direction: column;\n flex-direction: column;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n border-radius: 7px;\n}\n.product-name[data-v-43c41760] {\n font-size: 1.2em;\n font-weight: normal;\n}\n.product-name[data-v-43c41760]:hover {\n cursor: pointer;\n text-decoration: underline;\n}\n.product-price[data-v-43c41760] {\n width: 100%;\n -ms-flex-item-align: start;\n align-self: flex-start;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-pack: justify;\n -ms-flex-pack: justify;\n justify-content: space-between;\n margin-bottom: .5em;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.product-box[data-v-7efdfc57] {\n width: 800px;\n height: 400px;\n margin: 50px auto;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n padding: 1.5em;\n background-color: #fff;\n border-radius: 7px;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-pack: distribute;\n justify-content: space-around;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n}\n.product-image[data-v-7efdfc57] {\n width: 300px;\n}\n.product-info[data-v-7efdfc57] {\n width: 400px;\n -ms-flex-item-align: start;\n align-self: flex-start;\n}\n.product-title[data-v-7efdfc57] {\n font-weight: normal;\n}\n.product-price[data-v-7efdfc57] {\n font-size: 2em;\n font-weight: bolder;\n}\n.product-box button[data-v-7efdfc57] {\n width: 300px;\n margin: .3em 0;\n}\n\n.stars-box[data-v-5147e0a8] {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: vertical;\n -webkit-box-direction: normal;\n -ms-flex-direction: column;\n flex-direction: column;\n}\n.stars[data-v-5147e0a8] {\n width: 80%;\n}\n.star-bg[data-v-5147e0a8] {\n fill: #C4C4C4;\n}\n.star-fill[data-v-5147e0a8] {\n fill: #F2C94C;\n}\n.star-path[data-v-5147e0a8] {\n fill: #ffffff;\n}\n.total-stars[data-v-5147e0a8] {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n padding: .5em 0;\n}\n\n.modal[data-v-44910ab4] {\n width: 100%;\n max-width: 500px;\n height: 300px;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n padding: 1em;\n position: absolute;\n top: 50%;\n left: 50%;\n -webkit-transform: translate(-50%, -50%);\n transform: translate(-50%, -50%);\n background-color: #fff;\n -webkit-box-shadow: 0 0 10px rgba(144,144,144,.2);\n box-shadow: 0 0 10px rgba(144,144,144,.2);\n border: 0;\n border-radius: 5px;\n line-height: 1.5em;\n opacity: 1;\n -webkit-transition: all .5s;\n transition: all .5s;\n z-index: 1;\n}\n.modal button[data-v-44910ab4] {\n position: absolute;\n bottom: 10px;\n right: 10px;\n}\n.fade-enter-active[data-v-44910ab4], .fade-leave-active[data-v-44910ab4] {\n -webkit-transition: all .7s;\n transition: all .7s;\n}\n.fade-enter[data-v-44910ab4], .fade-leave-to[data-v-44910ab4] {\n opacity: 0;\n}\n\n.checkout-box[data-v-fb8b6cda] {\n width: 100%;\n max-width: 900px;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: vertical;\n -webkit-box-direction: normal;\n -ms-flex-direction: column;\n flex-direction: column;\n margin: 50px auto;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n padding: 1em;\n}\n.checkout-list[data-v-fb8b6cda] {\n padding: 0;\n}\n.checkout-product[data-v-fb8b6cda] {\n display: grid;\n grid-template-columns: 1fr 3fr 2fr .5fr;\n background-color: #fff;\n -webkit-box-shadow: 0px 0px 10px rgba(73, 74, 78, 0.1);\n box-shadow: 0px 0px 10px rgba(73, 74, 78, 0.1);\n border-radius: 5px;\n list-style: none;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n padding: .8em;\n margin: 1em 0;\n}\n.checkout-product *[data-v-fb8b6cda] {\n place-self: center;\n}\n.product-image[data-v-fb8b6cda] {\n grid-column: 1/2;\n width: 50%;\n}\n.product-name[data-v-fb8b6cda] {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n}\n.product-price[data-v-fb8b6cda] {\n font-size: 1.2em;\n font-weight: bold;\n}\n.product-remove[data-v-fb8b6cda] {\n width: 25px;\n height: 25px;\n border-radius: 50%;\n border: 0;\n background-color: #E0E0E0;\n color: #fff;\n cursor: pointer;\n}\n.total[data-v-fb8b6cda] {\n font-size: 2em;\n font-weight: bold;\n -ms-flex-item-align: end;\n align-self: flex-end;\n}\n.checkout-message[data-v-fb8b6cda] {\n font-size: 1.5em;\n}\n.fade-enter-active[data-v-fb8b6cda], .fade-leave-active[data-v-fb8b6cda] {\n -webkit-transition: all .5s;\n transition: all .5s;\n}\n.fade-enter[data-v-fb8b6cda], .fade-leave-to[data-v-fb8b6cda] {\n -webkit-transform: translateX(-40px);\n transform: translateX(-40px);\n opacity: 0;\n}\n"]} -------------------------------------------------------------------------------- /dist/static/js/app.f7a84d7a3c723f0c4136.js: -------------------------------------------------------------------------------- 1 | webpackJsonp([1],{"9Of2":function(t,e){},AG2p:function(t,e){},Bs4u:function(t,e){},FDrI:function(t,e){},HEHz:function(t,e){},JfzD:function(t,e){},KEEg:function(t,e){t.exports="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgd2lkdGg9IjUxMnB4IiBoZWlnaHQ9IjUxMnB4IiB2aWV3Qm94PSIwIDAgNTEwIDUxMCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTEwIDUxMDsiIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8Zz4KCTxnIGlkPSJzaG9wcGluZy1jYXJ0Ij4KCQk8cGF0aCBkPSJNMTUzLDQwOGMtMjguMDUsMC01MSwyMi45NS01MSw1MXMyMi45NSw1MSw1MSw1MXM1MS0yMi45NSw1MS01MVMxODEuMDUsNDA4LDE1Myw0MDh6IE0wLDB2NTFoNTFsOTEuOCwxOTMuOEwxMDcuMSwzMDYgICAgYy0yLjU1LDcuNjUtNS4xLDE3Ljg1LTUuMSwyNS41YzAsMjguMDUsMjIuOTUsNTEsNTEsNTFoMzA2di01MUgxNjMuMmMtMi41NSwwLTUuMS0yLjU1LTUuMS01LjF2LTIuNTUxbDIyLjk1LTQzLjM1aDE4OC43ICAgIGMyMC40LDAsMzUuNy0xMC4yLDQzLjM1LTI1LjVMNTA0LjksODkuMjVjNS4xLTUuMSw1LjEtNy42NSw1LjEtMTIuNzVjMC0xNS4zLTEwLjItMjUuNS0yNS41LTI1LjVIMTA3LjFMODQuMTUsMEgweiBNNDA4LDQwOCAgICBjLTI4LjA1LDAtNTEsMjIuOTUtNTEsNTFzMjIuOTUsNTEsNTEsNTFzNTEtMjIuOTUsNTEtNTFTNDM2LjA1LDQwOCw0MDgsNDA4eiIgZmlsbD0iI0ZGRkZGRiIvPgoJPC9nPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+Cjwvc3ZnPgo="},KIlG:function(t,e){},NHnr:function(t,e,s){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=s("7+uW"),o=s("Dd8w"),r=s.n(o),a=s("NYxO"),i={render:function(){var t=this.$createElement,e=this._self._c||t;return e("header",{staticClass:"header"},[e("nav",{staticClass:"nav"},[e("ul",{staticClass:"nav-links"},[e("li",{staticClass:"link"},[e("router-link",{attrs:{to:"/"}},[this._v("AllProducts")])],1),this._v(" "),e("li",{staticClass:"link"},[e("router-link",{attrs:{to:"/smartphones"}},[this._v("Smartphones")])],1),this._v(" "),e("li",{staticClass:"link"},[e("router-link",{attrs:{to:"/notebooks"}},[this._v("Notebooks")])],1)])]),this._v(" "),this._t("default")],2)},staticRenderFns:[]};var c=s("VU/8")({},i,!1,function(t){s("9Of2")},"data-v-ecc5ec8a",null).exports,u={render:function(){var t=this.$createElement,e=this._self._c||t;return e("button",{class:this.btnColor},[this._t("default"),this._v(" "),this.cartIcon?e("img",{attrs:{src:s("KEEg"),alt:"Cart Icon"}}):this._e()],2)},staticRenderFns:[]};var d=s("VU/8")({props:["btnColor","cartIcon"]},u,!1,function(t){s("UnBH")},"data-v-a61d3696",null).exports,m={components:{btn:d},methods:r()({},Object(a.b)(["showOrHiddenPopupCart"]),{hasProduct:function(){return this.getProductsInCart.length>0},totalPrice:function(){return this.getProductsInCart.reduce(function(t,e){return t+e.price},0)},showPopupCart:function(){this.showOrHiddenPopupCart()}}),computed:r()({},Object(a.c)(["getProductsInCart"]))},l={render:function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"box"},[t.hasProduct()?t._e():s("span",[t._v("No products :/")]),t._v(" "),t._l(t.getProductsInCart,function(e,n){return s("div",{key:n,staticClass:"box-item"},[s("img",{staticClass:"item-thumb",attrs:{src:e.image,alt:""}}),t._v(" "),s("h3",{staticClass:"item-name"},[t._v(t._s(e.name))]),t._v(" "),s("span",{staticClass:"item-amount"},[t._v("Amount: 1")]),t._v(" "),s("span",{staticClass:"item-price"},[t._v("R$ "+t._s(e.price)+", 00")])])}),t._v(" "),t.hasProduct()?s("div",{staticClass:"cart-info"},[s("span",[t._v("Total: R$ "+t._s(t.totalPrice())+", 00")]),t._v(" "),s("router-link",{attrs:{to:"/checkout"}},[s("btn",{attrs:{btnColor:"btn btn-small btn-info"},nativeOn:{click:function(e){t.showPopupCart()}}},[t._v("\n View cart\n ")])],1)],1):t._e()],2)},staticRenderFns:[]};var p=s("VU/8")(m,l,!1,function(t){s("KIlG")},"data-v-3d02a006",null).exports,h={render:function(){var t=this.$createElement;return(this._self._c||t)("div",{staticClass:"mask"})},staticRenderFns:[]};var v=s("VU/8")({},h,!1,function(t){s("AG2p")},"data-v-516c02ef",null).exports,g={components:{mainMenu:c,btn:d,popupcart:p,maskBg:v},methods:r()({},Object(a.b)(["showOrHiddenPopupCart"]),{hasProduct:function(){return this.getProductsInCart.length>0},showPopupCart:function(){this.showOrHiddenPopupCart()}}),computed:r()({},Object(a.c)(["getProductsInCart","getPopupCart"]))},C={render:function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"container"},[s("mainMenu",[s("btn",{attrs:{btnColor:"btn btn-small btn-info btn-popup",cartIcon:!0},nativeOn:{click:function(e){t.showPopupCart()}}},[t._v("\n Cart\n "),t.hasProduct()?s("span",{staticClass:"btn-circle"},[t._v("\n "+t._s(t.getProductsInCart.length)+"\n ")]):t._e()]),t._v(" "),s("transition",{attrs:{name:"appear"}},[t.getPopupCart?s("popupcart",{staticClass:"cart"}):t._e()],1)],1),t._v(" "),s("transition",{attrs:{name:"leave"}},[s("router-view")],1),t._v(" "),t.getPopupCart?s("maskBg",{nativeOn:{click:function(e){t.showPopupCart()}}}):t._e()],1)},staticRenderFns:[]};var f=s("VU/8")(g,C,!1,function(t){s("m0a0")},null,null).exports,b=s("/ocq"),P={props:["products"],components:{btn:d},methods:r()({},Object(a.b)(["addProduct","currentProduct"]),{addProductToCart:function(t){this.addProduct(t)},addCurrentProduct:function(t){this.currentProduct(t)}})},_={render:function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("ul",{staticClass:"listOfProducts"},t._l(t.products,function(e,n){return s("li",{key:n,staticClass:"product"},[s("img",{attrs:{src:e.image,alt:""}}),t._v(" "),s("router-link",{attrs:{to:"/product-details"}},[s("h2",{staticClass:"product-name",on:{click:function(s){t.addCurrentProduct(e)}}},[t._v("\n "+t._s(e.name)+"\n ")])]),t._v(" "),s("div",{staticClass:"product-price"},[s("span",[t._v("R$ "+t._s(e.price)+", 00")]),t._v(" "),s("span",[t._v("10 x "+t._s(Math.round(e.price/10))+", 00 ")])]),t._v(" "),s("btn",{attrs:{btnColor:"btn btn-large btn-sucess",cartIcon:!0},nativeOn:{click:function(s){t.addProductToCart(e)}}},[t._v("\n Add to cart\n ")])],1)}))},staticRenderFns:[]};var w=s("VU/8")(P,_,!1,function(t){s("fowb")},"data-v-43c41760",null).exports,M={components:{listOfProducts:w},computed:r()({},Object(a.c)(["getAllProducts"]))},I={render:function(){var t=this.$createElement;return(this._self._c||t)("listOfProducts",{attrs:{products:this.getAllProducts}})},staticRenderFns:[]};var y=s("VU/8")(M,I,!1,function(t){s("m+Y5")},"data-v-85fa0bf0",null).exports,L={components:{listOfProducts:w},computed:r()({},Object(a.c)(["getSmartphones"]))},x={render:function(){var t=this.$createElement;return(this._self._c||t)("listOfProducts",{attrs:{products:this.getSmartphones}})},staticRenderFns:[]};var j=s("VU/8")(L,x,!1,function(t){s("RQFn")},null,null).exports,O={components:{listOfProducts:w},computed:r()({},Object(a.c)(["getNotebooks"]))},k={render:function(){var t=this.$createElement;return(this._self._c||t)("listOfProducts",{attrs:{products:this.getNotebooks}})},staticRenderFns:[]};var N=s("VU/8")(O,k,!1,function(t){s("JfzD")},null,null).exports,R={render:function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"stars-box"},[e("svg",{staticClass:"stars",attrs:{xmlns:"http://www.w3.org/2000/svg",viewBox:"-54 -1 128 22"}},[e("path",{staticClass:"star-bg",attrs:{d:"M-55-1.9H75v24H-55z"}}),e("rect",{staticClass:"star-fill",attrs:{x:"-55",y:"-2",width:this.rate,height:"24"}}),e("path",{staticClass:"star-path",attrs:{d:"M-55-2v24H75V-2H-55zm17.8 21.4l-6.4-3.3-6.4 3.3 1.2-7-5.2-5 7.2-1 3.2-6.4 3.2 6.4 7.2 1-5.2 5 1.2 7zm26.8-.2l-6.4-3.3-6.4 3.3 1.2-7-5.2-5 7.2-1 3.2-6.4 3.2 6.4 7.2 1-5.2 5 1.2 7zm26.8 0L10 15.9l-6.4 3.3 1.2-7-5.2-5 7.2-1L10-.2l3.2 6.4 7.2 1-5.2 5 1.2 7zm26.8 0l-6.4-3.3-6.4 3.3 1.2-7-5.2-5 7.2-1 3.2-6.4L40 6.2l7.2 1-5.2 5 1.2 7zm26.8 0l-6.4-3.3-6.4 3.3 1.2-7-5.2-5 7.2-1 3.2-6.4 3.2 6.4 7.2 1-5.2 5 1.2 7z"}})]),this._v(" "),e("span",{staticClass:"total-stars"},[this._v(this._s(this.totalReviews)+" reviews.")])])},staticRenderFns:[]};var T=s("VU/8")({props:["rate","totalReviews"]},R,!1,function(t){s("hR/e")},"data-v-5147e0a8",null).exports,D={components:{btn:d,maskBg:v},computed:r()({},Object(a.c)({showModal:"getShowModal"})),methods:r()({},Object(a.b)(["showOrHiddenModal"]),{closeModal:function(){this.showOrHiddenModal()}})},S={render:function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",[s("transition",{attrs:{name:"fade"}},[s("div",{directives:[{name:"show",rawName:"v-show",value:t.showModal,expression:"showModal"}],staticClass:"modal"},[s("h3",[t._v("Details")]),t._v(" "),t._t("default"),t._v(" "),s("btn",{attrs:{btnColor:"btn btn-small btn-danger"},nativeOn:{click:function(e){t.closeModal()}}},[t._v("\n Close\n ")])],2)]),t._v(" "),s("transition",{attrs:{name:"fade"}},[s("maskBg",{directives:[{name:"show",rawName:"v-show",value:t.showModal,expression:"showModal"}],on:{click:function(e){t.closeModal()}}})],1)],1)},staticRenderFns:[]};var E={components:{btn:d,stars:T,modal:s("VU/8")(D,S,!1,function(t){s("Bs4u")},"data-v-44910ab4",null).exports},computed:r()({},Object(a.c)({currentProduct:"getCurrentProduct"})),methods:r()({},Object(a.b)(["addProduct","showOrHiddenModal"]),{addProductToCart:function(t){this.addProduct(t)},rated:function(t){return 20*t+"%"},openModal:function(){this.showOrHiddenModal()}})},U={render:function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"product-box"},[s("div",{staticClass:"product-image"},[s("img",{attrs:{src:t.currentProduct.image,alt:""}}),t._v(" "),s("stars",{attrs:{rate:t.rated(t.currentProduct.stars),totalReviews:t.currentProduct.totalReviews}})],1),t._v(" "),s("div",{staticClass:"product-info"},[s("h2",{staticClass:"product-title"},[t._v(t._s(t.currentProduct.name))]),t._v(" "),s("span",{staticClass:"product-price"},[t._v("R$ "+t._s(t.currentProduct.price)+", 00")]),t._v(" "),s("btn",{attrs:{btnColor:"btn btn-large btn-sucess",cartIcon:!0},nativeOn:{click:function(e){t.addProductToCart(t.currentProduct)}}},[t._v("\n Buy Now\n ")]),t._v(" "),s("btn",{attrs:{btnColor:"btn btn-large btn-info"},nativeOn:{click:function(e){t.openModal()}}},[t._v("\n More Info\n ")])],1),t._v(" "),s("modal",[t._v(t._s(t.currentProduct.details))])],1)},staticRenderFns:[]};var A=s("VU/8")(E,U,!1,function(t){s("HEHz")},"data-v-7efdfc57",null).exports,G={computed:r()({},Object(a.c)(["getProductsInCart"])),methods:r()({},Object(a.b)(["removeProduct"]),{hasProduct:function(){return this.getProductsInCart.length>0},totalPrice:function(){return this.getProductsInCart.reduce(function(t,e){return t+e.price},0)},remove:function(t){this.removeProduct(t)}})},B={render:function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"checkout-box"},[s("ul",{staticClass:"checkout-list"},[s("transition-group",{attrs:{name:"fade"}},t._l(t.getProductsInCart,function(e,n){return s("li",{key:n,staticClass:"checkout-product"},[s("img",{staticClass:"product-image",attrs:{src:e.image,alt:""}}),t._v(" "),s("h3",{staticClass:"product-name"},[t._v(t._s(e.name))]),t._v(" "),s("span",{staticClass:"product-price"},[t._v("R$ "+t._s(e.price)+",00 ")]),t._v(" "),s("button",{staticClass:"product-remove",on:{click:function(e){t.remove(n)}}},[t._v("X")])])}))],1),t._v(" "),t.hasProduct()?t._e():s("div",{staticClass:"checkout-message"},[s("h3",[t._v("No products...")]),t._v(" "),s("router-link",{attrs:{to:"./"}},[t._v("Back to list of products")])],1),t._v(" "),t.hasProduct()?s("h3",{staticClass:"total"},[t._v("\n Total: R$ "+t._s(t.totalPrice())+", 00\n ")]):t._e()])},staticRenderFns:[]};var V=s("VU/8")(G,B,!1,function(t){s("FDrI")},"data-v-fb8b6cda",null).exports;n.a.use(b.a);var z=new b.a({routes:[{path:"",name:"All Products",component:y},{path:"/smartphones",name:"Smartphones",component:j},{path:"/notebooks",name:"Notebooks",component:N},{path:"/product-details",name:"Product",component:A},{path:"/checkout",name:"Checkout",component:V}]});n.a.use(a.a);var F=new a.a.Store({state:{notebooks:[{name:"Notebook Lenovo Ideapad 320 Intel® Core i5-7200u 8GB",price:2259,image:"https://images-americanas.b2w.io/produtos/01/00/item/132381/3/132381386G1.png",stars:5,totalReviews:230,details:"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s"},{name:"Notebook Dell Inspiron i15-3567-A30P Intel Core 7ª i5 4GB",price:2284,image:"https://images-americanas.b2w.io/produtos/01/00/item/133280/7/133280747G1.jpg",stars:3.4,totalReviews:20,details:"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s"},{name:"Notebook Samsung Essentials E21 Intel Celeron Dual Core",price:1490,image:"https://images-americanas.b2w.io/produtos/01/00/item/132165/8/132165801G1.jpg",stars:1,totalReviews:1,details:"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s"},{name:"Notebook Samsung Expert X22 Intel Core 7 i5 8GB",price:2307,image:"https://images-americanas.b2w.io/produtos/01/00/item/132260/6/132260681G1.jpg",stars:4.4,totalReviews:340,details:"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s"},{name:"Notebook VAIO Fit 15S B1211B Intel Core i5 4GB",price:2599,image:"https://images-americanas.b2w.io/produtos/01/00/item/133252/7/133252789G1.jpg",stars:3,totalReviews:30,details:"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s"},{name:"Notebook Dell Alienware - i7 16GB",price:14e3,image:"https://images-submarino.b2w.io/produtos/01/00/sku/34470/9/34470934G1.jpg",stars:2,totalReviews:248,details:"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s"}],smartphones:[{name:"Smartphone Xiaomi Mi A1 dual Android one 7.1",price:1199,image:"https://images-americanas.b2w.io/produtos/01/00/sku/29296/2/29296259G1.jpg",stars:0,totalReviews:0,details:"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s"},{name:"Smartphone Moto G 5S Dual Chip Android 7.0",price:929,image:"https://images-americanas.b2w.io/produtos/01/00/item/132474/0/132474081G1.png",stars:1.5,totalReviews:11,details:"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s"},{name:'iPhone 8 Dourado 64GB Tela 4.7" IOS 11',price:3949,image:"https://images-americanas.b2w.io/produtos/01/00/item/132651/7/132651745G1.jpg",stars:1,totalReviews:2,details:"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s"},{name:"Smartphone Samsung Galaxy S7 Edge",price:1943,image:"https://images-americanas.b2w.io/produtos/01/00/item/125911/8/125911828G1.png",stars:5,totalReviews:310,details:"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s"},{name:"Smartphone Motorola Moto G6 Plus",price:1699,image:"https://images-americanas.b2w.io/produtos/01/00/item/133453/1/133453185G1.jpg",stars:2.9,totalReviews:42,details:"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s"},{name:"Smartphone Motorola Moto Z3 Play",price:2999,image:"https://images-submarino.b2w.io/produtos/01/00/item/133666/1/133666164G1.jpg",stars:.5,totalReviews:1,details:"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s"}],cartProducts:[],currentProduct:{},showModal:!1,showPopupCart:!1},getters:{getNotebooks:function(t){return t.notebooks},getSmartphones:function(t){return t.smartphones},getAllProducts:function(t){return t.notebooks.concat(t.smartphones)},getProductsInCart:function(t){return t.cartProducts},getCurrentProduct:function(t){return t.currentProduct},getShowModal:function(t){return t.showModal},getPopupCart:function(t){return t.showPopupCart}},mutations:{ADD_PRODUCT:function(t,e){t.cartProducts.push(e)},REMOVE_PRODUCT:function(t,e){t.cartProducts.splice(e,1)},CURRENT_PRODUCT:function(t,e){t.currentProduct=e},SHOW_MODAL:function(t){t.showModal=!t.showModal},SHOW_POPUP_CART:function(t){t.showPopupCart=!t.showPopupCart}},actions:{addProduct:function(t,e){t.commit("ADD_PRODUCT",e)},removeProduct:function(t,e){t.commit("REMOVE_PRODUCT",e)},currentProduct:function(t,e){t.commit("CURRENT_PRODUCT",e)},showOrHiddenModal:function(t){t.commit("SHOW_MODAL")},showOrHiddenPopupCart:function(t){t.commit("SHOW_POPUP_CART")}}});n.a.config.productionTip=!1,new n.a({el:"#app",router:z,store:F,components:{App:f},template:""})},RQFn:function(t,e){},UnBH:function(t,e){},fowb:function(t,e){},"hR/e":function(t,e){},"m+Y5":function(t,e){},m0a0:function(t,e){}},["NHnr"]); 2 | //# sourceMappingURL=app.f7a84d7a3c723f0c4136.js.map -------------------------------------------------------------------------------- /dist/static/js/app.f7a84d7a3c723f0c4136.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["webpack:///./src/assets/images/cart.svg","webpack:///./src/components/Menu.vue?3a3a","webpack:///./src/components/Menu.vue","webpack:///./src/components/Btn.vue?5c46","webpack:///./src/components/Btn.vue","webpack:///src/components/Btn.vue","webpack:///src/components/Popupcart.vue","webpack:///./src/components/Popupcart.vue?4882","webpack:///./src/components/Popupcart.vue","webpack:///./src/components/Mask.vue?5c15","webpack:///./src/components/Mask.vue","webpack:///src/App.vue","webpack:///./src/App.vue?e77f","webpack:///./src/App.vue","webpack:///src/components/ListOfProducts.vue","webpack:///./src/components/ListOfProducts.vue?77c2","webpack:///./src/components/ListOfProducts.vue","webpack:///src/components/AllProducts.vue","webpack:///./src/components/AllProducts.vue?f010","webpack:///./src/components/AllProducts.vue","webpack:///src/components/AllSmartphones.vue","webpack:///./src/components/AllSmartphones.vue?d0bf","webpack:///./src/components/AllSmartphones.vue","webpack:///src/components/AllNotebooks.vue","webpack:///./src/components/AllNotebooks.vue?2050","webpack:///./src/components/AllNotebooks.vue","webpack:///./src/components/Stars.vue?cd03","webpack:///./src/components/Stars.vue","webpack:///src/components/Stars.vue","webpack:///src/components/Modal.vue","webpack:///./src/components/Modal.vue?2bc7","webpack:///./src/components/Modal.vue","webpack:///src/components/Product.vue","webpack:///./src/components/Product.vue?df89","webpack:///./src/components/Product.vue","webpack:///src/components/CartCheckout.vue","webpack:///./src/components/CartCheckout.vue?1d2b","webpack:///./src/components/CartCheckout.vue","webpack:///./src/router/index.js","webpack:///./src/store.js","webpack:///./src/main.js"],"names":["module","exports","components_Menu","render","_h","this","$createElement","_c","_self","staticClass","attrs","to","_v","_t","staticRenderFns","src_components_Menu","__webpack_require__","normalizeComponent","ssrContext","components_Btn","class","btnColor","src","alt","_e","src_components_Btn","Btn_normalizeComponent","props","Popupcart","components","btn","methods","extends_default","Object","vuex_esm","hasProduct","getProductsInCart","length","totalPrice","reduce","current","next","price","showPopupCart","showOrHiddenPopupCart","computed","components_Popupcart","_vm","_l","product","index","key","image","_s","name","nativeOn","click","$event","src_components_Popupcart","Popupcart_normalizeComponent","components_Mask","src_components_Mask","Mask_normalizeComponent","App","mainMenu","popupcart","maskBg","selectortype_template_index_0_src_App","cartIcon","src_App","App_normalizeComponent","ListOfProducts","addProductToCart","addProduct","addCurrentProduct","currentProduct","components_ListOfProducts","on","Math","round","src_components_ListOfProducts","ListOfProducts_normalizeComponent","AllProducts","listOfProducts","components_AllProducts","products","getAllProducts","src_components_AllProducts","AllProducts_normalizeComponent","AllSmartphones","components_AllSmartphones","getSmartphones","src_components_AllSmartphones","AllSmartphones_normalizeComponent","AllNotebooks","components_AllNotebooks","getNotebooks","src_components_AllNotebooks","AllNotebooks_normalizeComponent","components_Stars","xmlns","viewBox","d","x","y","width","rate","height","totalReviews","src_components_Stars","Stars_normalizeComponent","Modal","showModal","closeModal","showOrHiddenModal","components_Modal","directives","rawName","value","expression","Product","stars","modal","Modal_normalizeComponent","rated","openModal","components_Product","details","src_components_Product","Product_normalizeComponent","CartCheckout","remove","removeProduct","components_CartCheckout","src_components_CartCheckout","CartCheckout_normalizeComponent","vue_esm","use","vue_router_esm","router","routes","path","component","store","Store","state","notebooks","smartphones","cartProducts","getters","concat","getCurrentProduct","getShowModal","getPopupCart","mutations","ADD_PRODUCT","push","REMOVE_PRODUCT","splice","CURRENT_PRODUCT","SHOW_MODAL","SHOW_POPUP_CART","actions","context","commit","config","productionTip","el","template"],"mappings":"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","file":"static/js/app.f7a84d7a3c723f0c4136.js","sourcesContent":["module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgd2lkdGg9IjUxMnB4IiBoZWlnaHQ9IjUxMnB4IiB2aWV3Qm94PSIwIDAgNTEwIDUxMCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTEwIDUxMDsiIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8Zz4KCTxnIGlkPSJzaG9wcGluZy1jYXJ0Ij4KCQk8cGF0aCBkPSJNMTUzLDQwOGMtMjguMDUsMC01MSwyMi45NS01MSw1MXMyMi45NSw1MSw1MSw1MXM1MS0yMi45NSw1MS01MVMxODEuMDUsNDA4LDE1Myw0MDh6IE0wLDB2NTFoNTFsOTEuOCwxOTMuOEwxMDcuMSwzMDYgICAgYy0yLjU1LDcuNjUtNS4xLDE3Ljg1LTUuMSwyNS41YzAsMjguMDUsMjIuOTUsNTEsNTEsNTFoMzA2di01MUgxNjMuMmMtMi41NSwwLTUuMS0yLjU1LTUuMS01LjF2LTIuNTUxbDIyLjk1LTQzLjM1aDE4OC43ICAgIGMyMC40LDAsMzUuNy0xMC4yLDQzLjM1LTI1LjVMNTA0LjksODkuMjVjNS4xLTUuMSw1LjEtNy42NSw1LjEtMTIuNzVjMC0xNS4zLTEwLjItMjUuNS0yNS41LTI1LjVIMTA3LjFMODQuMTUsMEgweiBNNDA4LDQwOCAgICBjLTI4LjA1LDAtNTEsMjIuOTUtNTEsNTFzMjIuOTUsNTEsNTEsNTFzNTEtMjIuOTUsNTEtNTFTNDM2LjA1LDQwOCw0MDgsNDA4eiIgZmlsbD0iI0ZGRkZGRiIvPgoJPC9nPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+CjxnPgo8L2c+Cjwvc3ZnPgo=\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/assets/images/cart.svg\n// module id = KEEg\n// module chunks = 1","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('header',{staticClass:\"header\"},[_c('nav',{staticClass:\"nav\"},[_c('ul',{staticClass:\"nav-links\"},[_c('li',{staticClass:\"link\"},[_c('router-link',{attrs:{\"to\":\"/\"}},[_vm._v(\"AllProducts\")])],1),_vm._v(\" \"),_c('li',{staticClass:\"link\"},[_c('router-link',{attrs:{\"to\":\"/smartphones\"}},[_vm._v(\"Smartphones\")])],1),_vm._v(\" \"),_c('li',{staticClass:\"link\"},[_c('router-link',{attrs:{\"to\":\"/notebooks\"}},[_vm._v(\"Notebooks\")])],1)])]),_vm._v(\" \"),_vm._t(\"default\")],2)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-ecc5ec8a\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/Menu.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-ecc5ec8a\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../node_modules/vue-loader/lib/selector?type=styles&index=0!./Menu.vue\")\n}\nvar normalizeComponent = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./Menu.vue\"\nimport __vue_script__ from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./Menu.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-ecc5ec8a\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./Menu.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-ecc5ec8a\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/Menu.vue\n// module id = null\n// module chunks = ","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{class:_vm.btnColor},[_vm._t(\"default\"),_vm._v(\" \"),(_vm.cartIcon)?_c('img',{attrs:{\"src\":require(\"../assets/images/cart.svg\"),\"alt\":\"Cart Icon\"}}):_vm._e()],2)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-a61d3696\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/Btn.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-a61d3696\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../node_modules/vue-loader/lib/selector?type=styles&index=0!./Btn.vue\")\n}\nvar normalizeComponent = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./Btn.vue\"\nimport __vue_script__ from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./Btn.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-a61d3696\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./Btn.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-a61d3696\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/Btn.vue\n// module id = null\n// module chunks = ","\n\n\n\n\n\n\n\n// WEBPACK FOOTER //\n// src/components/Btn.vue","\n\n\n\n\n\n\n\n// WEBPACK FOOTER //\n// src/components/Popupcart.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"box\"},[(!_vm.hasProduct())?_c('span',[_vm._v(\"No products :/\")]):_vm._e(),_vm._v(\" \"),_vm._l((_vm.getProductsInCart),function(product,index){return _c('div',{key:index,staticClass:\"box-item\"},[_c('img',{staticClass:\"item-thumb\",attrs:{\"src\":product.image,\"alt\":\"\"}}),_vm._v(\" \"),_c('h3',{staticClass:\"item-name\"},[_vm._v(_vm._s(product.name))]),_vm._v(\" \"),_c('span',{staticClass:\"item-amount\"},[_vm._v(\"Amount: 1\")]),_vm._v(\" \"),_c('span',{staticClass:\"item-price\"},[_vm._v(\"R$ \"+_vm._s(product.price)+\", 00\")])])}),_vm._v(\" \"),(_vm.hasProduct())?_c('div',{staticClass:\"cart-info\"},[_c('span',[_vm._v(\"Total: R$ \"+_vm._s(_vm.totalPrice())+\", 00\")]),_vm._v(\" \"),_c('router-link',{attrs:{\"to\":\"/checkout\"}},[_c('btn',{attrs:{\"btnColor\":\"btn btn-small btn-info\"},nativeOn:{\"click\":function($event){_vm.showPopupCart()}}},[_vm._v(\"\\n View cart\\n \")])],1)],1):_vm._e()],2)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-3d02a006\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/Popupcart.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-3d02a006\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../node_modules/vue-loader/lib/selector?type=styles&index=0!./Popupcart.vue\")\n}\nvar normalizeComponent = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./Popupcart.vue\"\nimport __vue_script__ from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./Popupcart.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-3d02a006\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./Popupcart.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-3d02a006\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/Popupcart.vue\n// module id = null\n// module chunks = ","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"mask\"})}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-516c02ef\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/Mask.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-516c02ef\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../node_modules/vue-loader/lib/selector?type=styles&index=0!./Mask.vue\")\n}\nvar normalizeComponent = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./Mask.vue\"\nimport __vue_script__ from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./Mask.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-516c02ef\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./Mask.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-516c02ef\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/Mask.vue\n// module id = null\n// module chunks = ","\n\n\n\n\n\n\n\n// WEBPACK FOOTER //\n// src/App.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"container\"},[_c('mainMenu',[_c('btn',{attrs:{\"btnColor\":\"btn btn-small btn-info btn-popup\",\"cartIcon\":true},nativeOn:{\"click\":function($event){_vm.showPopupCart()}}},[_vm._v(\"\\n Cart\\n \"),(_vm.hasProduct())?_c('span',{staticClass:\"btn-circle\"},[_vm._v(\"\\n \"+_vm._s(_vm.getProductsInCart.length)+\"\\n \")]):_vm._e()]),_vm._v(\" \"),_c('transition',{attrs:{\"name\":\"appear\"}},[(_vm.getPopupCart)?_c('popupcart',{staticClass:\"cart\"}):_vm._e()],1)],1),_vm._v(\" \"),_c('transition',{attrs:{\"name\":\"leave\"}},[_c('router-view')],1),_vm._v(\" \"),(_vm.getPopupCart)?_c('maskBg',{nativeOn:{\"click\":function($event){_vm.showPopupCart()}}}):_vm._e()],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-89ee76c0\",\"hasScoped\":false,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/App.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-89ee76c0\\\",\\\"scoped\\\":false,\\\"hasInlineConfig\\\":false}!../node_modules/vue-loader/lib/selector?type=styles&index=0!./App.vue\")\n}\nvar normalizeComponent = require(\"!../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../node_modules/vue-loader/lib/selector?type=script&index=0!./App.vue\"\nimport __vue_script__ from \"!!babel-loader!../node_modules/vue-loader/lib/selector?type=script&index=0!./App.vue\"\n/* template */\nimport __vue_template__ from \"!!../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-89ee76c0\\\",\\\"hasScoped\\\":false,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../node_modules/vue-loader/lib/selector?type=template&index=0!./App.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/App.vue\n// module id = null\n// module chunks = ","\n\n\n\n\n\n\n\n\n// WEBPACK FOOTER //\n// src/components/ListOfProducts.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ul',{staticClass:\"listOfProducts\"},_vm._l((_vm.products),function(product,index){return _c('li',{key:index,staticClass:\"product\"},[_c('img',{attrs:{\"src\":product.image,\"alt\":\"\"}}),_vm._v(\" \"),_c('router-link',{attrs:{\"to\":\"/product-details\"}},[_c('h2',{staticClass:\"product-name\",on:{\"click\":function($event){_vm.addCurrentProduct(product)}}},[_vm._v(\"\\n \"+_vm._s(product.name)+\"\\n \")])]),_vm._v(\" \"),_c('div',{staticClass:\"product-price\"},[_c('span',[_vm._v(\"R$ \"+_vm._s(product.price)+\", 00\")]),_vm._v(\" \"),_c('span',[_vm._v(\"10 x \"+_vm._s(Math.round(product.price / 10))+\", 00 \")])]),_vm._v(\" \"),_c('btn',{attrs:{\"btnColor\":\"btn btn-large btn-sucess\",\"cartIcon\":true},nativeOn:{\"click\":function($event){_vm.addProductToCart(product)}}},[_vm._v(\"\\n Add to cart\\n \")])],1)}))}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-43c41760\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/ListOfProducts.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-43c41760\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../node_modules/vue-loader/lib/selector?type=styles&index=0!./ListOfProducts.vue\")\n}\nvar normalizeComponent = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./ListOfProducts.vue\"\nimport __vue_script__ from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./ListOfProducts.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-43c41760\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./ListOfProducts.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-43c41760\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/ListOfProducts.vue\n// module id = null\n// module chunks = ","\n\n\n\n\n\n\n\n\n// WEBPACK FOOTER //\n// src/components/AllProducts.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('listOfProducts',{attrs:{\"products\":_vm.getAllProducts}})}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-85fa0bf0\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/AllProducts.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-85fa0bf0\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../node_modules/vue-loader/lib/selector?type=styles&index=0!./AllProducts.vue\")\n}\nvar normalizeComponent = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./AllProducts.vue\"\nimport __vue_script__ from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./AllProducts.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-85fa0bf0\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./AllProducts.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-85fa0bf0\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/AllProducts.vue\n// module id = null\n// module chunks = ","\n\n\n\n\n\n\n\n\n// WEBPACK FOOTER //\n// src/components/AllSmartphones.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('listOfProducts',{attrs:{\"products\":_vm.getSmartphones}})}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-5a3b4aa7\",\"hasScoped\":false,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/AllSmartphones.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-5a3b4aa7\\\",\\\"scoped\\\":false,\\\"hasInlineConfig\\\":false}!../../node_modules/vue-loader/lib/selector?type=styles&index=0!./AllSmartphones.vue\")\n}\nvar normalizeComponent = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./AllSmartphones.vue\"\nimport __vue_script__ from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./AllSmartphones.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-5a3b4aa7\\\",\\\"hasScoped\\\":false,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./AllSmartphones.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/AllSmartphones.vue\n// module id = null\n// module chunks = ","\n\n\n\n\n\n\n\n\n// WEBPACK FOOTER //\n// src/components/AllNotebooks.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('listOfProducts',{attrs:{\"products\":_vm.getNotebooks}})}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-27644bde\",\"hasScoped\":false,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/AllNotebooks.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-27644bde\\\",\\\"scoped\\\":false,\\\"hasInlineConfig\\\":false}!../../node_modules/vue-loader/lib/selector?type=styles&index=0!./AllNotebooks.vue\")\n}\nvar normalizeComponent = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./AllNotebooks.vue\"\nimport __vue_script__ from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./AllNotebooks.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-27644bde\\\",\\\"hasScoped\\\":false,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./AllNotebooks.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/AllNotebooks.vue\n// module id = null\n// module chunks = ","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"stars-box\"},[_c('svg',{staticClass:\"stars\",attrs:{\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"-54 -1 128 22\"}},[_c('path',{staticClass:\"star-bg\",attrs:{\"d\":\"M-55-1.9H75v24H-55z\"}}),_c('rect',{staticClass:\"star-fill\",attrs:{\"x\":\"-55\",\"y\":\"-2\",\"width\":_vm.rate,\"height\":\"24\"}}),_c('path',{staticClass:\"star-path\",attrs:{\"d\":\"M-55-2v24H75V-2H-55zm17.8 21.4l-6.4-3.3-6.4 3.3 1.2-7-5.2-5 7.2-1 3.2-6.4 3.2 6.4 7.2 1-5.2 5 1.2 7zm26.8-.2l-6.4-3.3-6.4 3.3 1.2-7-5.2-5 7.2-1 3.2-6.4 3.2 6.4 7.2 1-5.2 5 1.2 7zm26.8 0L10 15.9l-6.4 3.3 1.2-7-5.2-5 7.2-1L10-.2l3.2 6.4 7.2 1-5.2 5 1.2 7zm26.8 0l-6.4-3.3-6.4 3.3 1.2-7-5.2-5 7.2-1 3.2-6.4L40 6.2l7.2 1-5.2 5 1.2 7zm26.8 0l-6.4-3.3-6.4 3.3 1.2-7-5.2-5 7.2-1 3.2-6.4 3.2 6.4 7.2 1-5.2 5 1.2 7z\"}})]),_vm._v(\" \"),_c('span',{staticClass:\"total-stars\"},[_vm._v(_vm._s(_vm.totalReviews)+\" reviews.\")])])}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-5147e0a8\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/Stars.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-5147e0a8\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../node_modules/vue-loader/lib/selector?type=styles&index=0!./Stars.vue\")\n}\nvar normalizeComponent = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./Stars.vue\"\nimport __vue_script__ from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./Stars.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-5147e0a8\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./Stars.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-5147e0a8\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/Stars.vue\n// module id = null\n// module chunks = ","\n\n\n\n\n\n\n\n// WEBPACK FOOTER //\n// src/components/Stars.vue","\n\n\n\n\n\n\n\n// WEBPACK FOOTER //\n// src/components/Modal.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('transition',{attrs:{\"name\":\"fade\"}},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showModal),expression:\"showModal\"}],staticClass:\"modal\"},[_c('h3',[_vm._v(\"Details\")]),_vm._v(\" \"),_vm._t(\"default\"),_vm._v(\" \"),_c('btn',{attrs:{\"btnColor\":\"btn btn-small btn-danger\"},nativeOn:{\"click\":function($event){_vm.closeModal()}}},[_vm._v(\"\\n Close\\n \")])],2)]),_vm._v(\" \"),_c('transition',{attrs:{\"name\":\"fade\"}},[_c('maskBg',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showModal),expression:\"showModal\"}],on:{\"click\":function($event){_vm.closeModal()}}})],1)],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-44910ab4\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/Modal.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-44910ab4\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../node_modules/vue-loader/lib/selector?type=styles&index=0!./Modal.vue\")\n}\nvar normalizeComponent = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./Modal.vue\"\nimport __vue_script__ from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./Modal.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-44910ab4\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./Modal.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-44910ab4\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/Modal.vue\n// module id = null\n// module chunks = ","\n\n\n\n\n\n\n\n// WEBPACK FOOTER //\n// src/components/Product.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"product-box\"},[_c('div',{staticClass:\"product-image\"},[_c('img',{attrs:{\"src\":_vm.currentProduct.image,\"alt\":\"\"}}),_vm._v(\" \"),_c('stars',{attrs:{\"rate\":_vm.rated(_vm.currentProduct.stars),\"totalReviews\":_vm.currentProduct.totalReviews}})],1),_vm._v(\" \"),_c('div',{staticClass:\"product-info\"},[_c('h2',{staticClass:\"product-title\"},[_vm._v(_vm._s(_vm.currentProduct.name))]),_vm._v(\" \"),_c('span',{staticClass:\"product-price\"},[_vm._v(\"R$ \"+_vm._s(_vm.currentProduct.price)+\", 00\")]),_vm._v(\" \"),_c('btn',{attrs:{\"btnColor\":\"btn btn-large btn-sucess\",\"cartIcon\":true},nativeOn:{\"click\":function($event){_vm.addProductToCart(_vm.currentProduct)}}},[_vm._v(\"\\n Buy Now\\n \")]),_vm._v(\" \"),_c('btn',{attrs:{\"btnColor\":\"btn btn-large btn-info\"},nativeOn:{\"click\":function($event){_vm.openModal()}}},[_vm._v(\"\\n More Info\\n \")])],1),_vm._v(\" \"),_c('modal',[_vm._v(_vm._s(_vm.currentProduct.details))])],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-7efdfc57\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/Product.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-7efdfc57\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../node_modules/vue-loader/lib/selector?type=styles&index=0!./Product.vue\")\n}\nvar normalizeComponent = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./Product.vue\"\nimport __vue_script__ from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./Product.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-7efdfc57\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./Product.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-7efdfc57\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/Product.vue\n// module id = null\n// module chunks = ","\n\n\n\n\n\n\n\n// WEBPACK FOOTER //\n// src/components/CartCheckout.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"checkout-box\"},[_c('ul',{staticClass:\"checkout-list\"},[_c('transition-group',{attrs:{\"name\":\"fade\"}},_vm._l((_vm.getProductsInCart),function(product,index){return _c('li',{key:index,staticClass:\"checkout-product\"},[_c('img',{staticClass:\"product-image\",attrs:{\"src\":product.image,\"alt\":\"\"}}),_vm._v(\" \"),_c('h3',{staticClass:\"product-name\"},[_vm._v(_vm._s(product.name))]),_vm._v(\" \"),_c('span',{staticClass:\"product-price\"},[_vm._v(\"R$ \"+_vm._s(product.price)+\",00 \")]),_vm._v(\" \"),_c('button',{staticClass:\"product-remove\",on:{\"click\":function($event){_vm.remove(index)}}},[_vm._v(\"X\")])])}))],1),_vm._v(\" \"),(!_vm.hasProduct())?_c('div',{staticClass:\"checkout-message\"},[_c('h3',[_vm._v(\"No products...\")]),_vm._v(\" \"),_c('router-link',{attrs:{\"to\":\"./\"}},[_vm._v(\"Back to list of products\")])],1):_vm._e(),_vm._v(\" \"),(_vm.hasProduct())?_c('h3',{staticClass:\"total\"},[_vm._v(\"\\n Total: R$ \"+_vm._s(_vm.totalPrice())+\", 00\\n \")]):_vm._e()])}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-fb8b6cda\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/CartCheckout.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-fb8b6cda\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../node_modules/vue-loader/lib/selector?type=styles&index=0!./CartCheckout.vue\")\n}\nvar normalizeComponent = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./CartCheckout.vue\"\nimport __vue_script__ from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./CartCheckout.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-fb8b6cda\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./CartCheckout.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-fb8b6cda\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/CartCheckout.vue\n// module id = null\n// module chunks = ","import Vue from 'vue';\nimport Router from 'vue-router';\nimport AllProducts from '../components/AllProducts';\nimport AllSmartphones from '../components/AllSmartphones';\nimport AllNotebooks from '../components/AllNotebooks';\nimport Product from '../components/Product';\nimport CartCheckout from '../components/CartCheckout';\n\nVue.use(Router);\n\nexport default new Router({\n routes: [\n {\n path: '',\n name: 'All Products',\n component: AllProducts,\n },\n {\n path: '/smartphones',\n name: 'Smartphones',\n component: AllSmartphones,\n },\n {\n path: '/notebooks',\n name: 'Notebooks',\n component: AllNotebooks,\n },\n {\n path: '/product-details',\n name: 'Product',\n component: Product,\n },\n {\n path: '/checkout',\n name: 'Checkout',\n component: CartCheckout,\n },\n ],\n});\n\n\n\n// WEBPACK FOOTER //\n// ./src/router/index.js","import Vue from 'vue';\nimport Vuex from 'vuex';\n\nVue.use(Vuex);\n\nexport default new Vuex.Store({\n state: {\n notebooks: [\n {\n name: 'Notebook Lenovo Ideapad 320 Intel® Core i5-7200u 8GB',\n price: 2259,\n image: 'https://images-americanas.b2w.io/produtos/01/00/item/132381/3/132381386G1.png',\n stars: 5,\n totalReviews: 230,\n details: 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s',\n },\n {\n name: 'Notebook Dell Inspiron i15-3567-A30P Intel Core 7ª i5 4GB',\n price: 2284,\n image: 'https://images-americanas.b2w.io/produtos/01/00/item/133280/7/133280747G1.jpg',\n stars: 3.4,\n totalReviews: 20,\n details: 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s',\n },\n {\n name: 'Notebook Samsung Essentials E21 Intel Celeron Dual Core',\n price: 1490,\n image: 'https://images-americanas.b2w.io/produtos/01/00/item/132165/8/132165801G1.jpg',\n stars: 1,\n totalReviews: 1,\n details: 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s',\n },\n {\n name: 'Notebook Samsung Expert X22 Intel Core 7 i5 8GB',\n price: 2307,\n image: 'https://images-americanas.b2w.io/produtos/01/00/item/132260/6/132260681G1.jpg',\n stars: 4.4,\n totalReviews: 340,\n details: 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s',\n },\n {\n name: 'Notebook VAIO Fit 15S B1211B Intel Core i5 4GB',\n price: 2599,\n image: 'https://images-americanas.b2w.io/produtos/01/00/item/133252/7/133252789G1.jpg',\n stars: 3,\n totalReviews: 30,\n details: 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s',\n },\n {\n name: 'Notebook Dell Alienware - i7 16GB',\n price: 14000,\n image: 'https://images-submarino.b2w.io/produtos/01/00/sku/34470/9/34470934G1.jpg',\n stars: 2,\n totalReviews: 248,\n details: 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s',\n },\n ],\n\n smartphones: [\n {\n name: 'Smartphone Xiaomi Mi A1 dual Android one 7.1',\n price: 1199,\n image: 'https://images-americanas.b2w.io/produtos/01/00/sku/29296/2/29296259G1.jpg',\n stars: 0,\n totalReviews: 0,\n details: 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s',\n },\n {\n name: 'Smartphone Moto G 5S Dual Chip Android 7.0',\n price: 929,\n image: 'https://images-americanas.b2w.io/produtos/01/00/item/132474/0/132474081G1.png',\n stars: 1.5,\n totalReviews: 11,\n details: 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s',\n },\n {\n name: 'iPhone 8 Dourado 64GB Tela 4.7\" IOS 11',\n price: 3949,\n image: 'https://images-americanas.b2w.io/produtos/01/00/item/132651/7/132651745G1.jpg',\n stars: 1,\n totalReviews: 2,\n details: 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s',\n },\n {\n name: 'Smartphone Samsung Galaxy S7 Edge',\n price: 1943,\n image: 'https://images-americanas.b2w.io/produtos/01/00/item/125911/8/125911828G1.png',\n stars: 5,\n totalReviews: 310,\n details: 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s',\n },\n {\n name: 'Smartphone Motorola Moto G6 Plus',\n price: 1699,\n image: 'https://images-americanas.b2w.io/produtos/01/00/item/133453/1/133453185G1.jpg',\n stars: 2.9,\n totalReviews: 42,\n details: 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s',\n },\n {\n name: 'Smartphone Motorola Moto Z3 Play',\n price: 2999,\n image: 'https://images-submarino.b2w.io/produtos/01/00/item/133666/1/133666164G1.jpg',\n stars: 0.5,\n totalReviews: 1,\n details: 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s',\n },\n ],\n\n cartProducts: [],\n currentProduct: {},\n showModal: false,\n showPopupCart: false,\n },\n\n getters: {\n getNotebooks: state => state.notebooks,\n getSmartphones: state => state.smartphones,\n getAllProducts: state => state.notebooks.concat(state.smartphones),\n getProductsInCart: state => state.cartProducts,\n getCurrentProduct: state => state.currentProduct,\n getShowModal: state => state.showModal,\n getPopupCart: state => state.showPopupCart,\n },\n\n mutations: {\n ADD_PRODUCT: (state, product) => {\n state.cartProducts.push(product);\n },\n REMOVE_PRODUCT: (state, index) => {\n state.cartProducts.splice(index, 1);\n },\n CURRENT_PRODUCT: (state, product) => {\n state.currentProduct = product;\n },\n SHOW_MODAL: (state) => {\n state.showModal = !state.showModal;\n },\n SHOW_POPUP_CART: (state) => {\n state.showPopupCart = !state.showPopupCart;\n },\n },\n\n actions: {\n addProduct: (context, product) => {\n context.commit('ADD_PRODUCT', product);\n },\n removeProduct: (context, index) => {\n context.commit('REMOVE_PRODUCT', index);\n },\n currentProduct: (context, product) => {\n context.commit('CURRENT_PRODUCT', product);\n },\n showOrHiddenModal: (context) => {\n context.commit('SHOW_MODAL');\n },\n showOrHiddenPopupCart: (context) => {\n context.commit('SHOW_POPUP_CART');\n },\n },\n});\n\n\n\n// WEBPACK FOOTER //\n// ./src/store.js","// The Vue build version to load with the `import` command\n// (runtime-only or standalone) has been set in webpack.base.conf with an alias.\nimport Vue from 'vue';\nimport App from './App';\nimport router from './router';\nimport store from './store';\n\nVue.config.productionTip = false;\n\n/* eslint-disable no-new */\nnew Vue({\n el: '#app',\n router,\n store,\n components: { App },\n template: '',\n});\n\n\n\n// WEBPACK FOOTER //\n// ./src/main.js"],"sourceRoot":""} -------------------------------------------------------------------------------- /dist/static/js/manifest.25fc6a34a71a20c9ed6f.js: -------------------------------------------------------------------------------- 1 | !function(r){var t=window.webpackJsonp;window.webpackJsonp=function(n,u,c){for(var i,f,p,a=0,s=[];a 2 | 3 | 4 | 5 | 6 | vue-cart 7 | 8 | 9 |
10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue-cart", 3 | "version": "1.0.0", 4 | "description": "A Vue.js project", 5 | "author": "crisgon ", 6 | "private": true, 7 | "scripts": { 8 | "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js", 9 | "start": "npm run dev", 10 | "lint": "eslint --ext .js,.vue src", 11 | "build": "node build/build.js" 12 | }, 13 | "dependencies": { 14 | "vue": "^2.5.2", 15 | "vue-router": "^3.0.1", 16 | "vuex": "^3.0.1" 17 | }, 18 | "devDependencies": { 19 | "autoprefixer": "^7.1.2", 20 | "babel-core": "^6.22.1", 21 | "babel-eslint": "^8.2.1", 22 | "babel-helper-vue-jsx-merge-props": "^2.0.3", 23 | "babel-loader": "^7.1.1", 24 | "babel-plugin-syntax-jsx": "^6.18.0", 25 | "babel-plugin-transform-runtime": "^6.22.0", 26 | "babel-plugin-transform-vue-jsx": "^3.5.0", 27 | "babel-preset-env": "^1.3.2", 28 | "babel-preset-stage-2": "^6.22.0", 29 | "chalk": "^2.0.1", 30 | "copy-webpack-plugin": "^4.0.1", 31 | "css-loader": "^0.28.0", 32 | "eslint": "^4.15.0", 33 | "eslint-config-airbnb-base": "^11.3.0", 34 | "eslint-friendly-formatter": "^3.0.0", 35 | "eslint-import-resolver-webpack": "^0.8.3", 36 | "eslint-loader": "^1.7.1", 37 | "eslint-plugin-import": "^2.7.0", 38 | "eslint-plugin-vue": "^4.0.0", 39 | "extract-text-webpack-plugin": "^3.0.0", 40 | "file-loader": "^1.1.4", 41 | "friendly-errors-webpack-plugin": "^1.6.1", 42 | "html-webpack-plugin": "^2.30.1", 43 | "node-notifier": "^5.1.2", 44 | "optimize-css-assets-webpack-plugin": "^3.2.0", 45 | "ora": "^1.2.0", 46 | "portfinder": "^1.0.13", 47 | "postcss-import": "^11.0.0", 48 | "postcss-loader": "^2.0.8", 49 | "postcss-url": "^7.2.1", 50 | "rimraf": "^2.6.0", 51 | "semver": "^5.3.0", 52 | "shelljs": "^0.7.6", 53 | "uglifyjs-webpack-plugin": "^1.1.1", 54 | "url-loader": "^0.5.8", 55 | "vue-loader": "^13.3.0", 56 | "vue-style-loader": "^3.0.1", 57 | "vue-template-compiler": "^2.5.2", 58 | "webpack": "^3.6.0", 59 | "webpack-bundle-analyzer": "^2.9.0", 60 | "webpack-dev-server": "^2.9.1", 61 | "webpack-merge": "^4.1.0" 62 | }, 63 | "engines": { 64 | "node": ">= 6.0.0", 65 | "npm": ">= 3.0.0" 66 | }, 67 | "browserslist": [ 68 | "> 1%", 69 | "last 2 versions", 70 | "not ie <= 8" 71 | ] 72 | } 73 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 56 | 57 | 121 | -------------------------------------------------------------------------------- /src/assets/css/normalize.css: -------------------------------------------------------------------------------- 1 | /*! normalize.css v8.0.0 | MIT License | github.com/necolas/normalize.css */ 2 | 3 | /* Document 4 | ========================================================================== */ 5 | 6 | /** 7 | * 1. Correct the line height in all browsers. 8 | * 2. Prevent adjustments of font size after orientation changes in iOS. 9 | */ 10 | 11 | html { 12 | line-height: 1.15; /* 1 */ 13 | -webkit-text-size-adjust: 100%; /* 2 */ 14 | } 15 | 16 | /* Sections 17 | ========================================================================== */ 18 | 19 | /** 20 | * Remove the margin in all browsers. 21 | */ 22 | 23 | body { 24 | margin: 0; 25 | } 26 | 27 | /** 28 | * Correct the font size and margin on `h1` elements within `section` and 29 | * `article` contexts in Chrome, Firefox, and Safari. 30 | */ 31 | 32 | h1 { 33 | font-size: 2em; 34 | margin: 0.67em 0; 35 | } 36 | 37 | /* Grouping content 38 | ========================================================================== */ 39 | 40 | /** 41 | * 1. Add the correct box sizing in Firefox. 42 | * 2. Show the overflow in Edge and IE. 43 | */ 44 | 45 | hr { 46 | box-sizing: content-box; /* 1 */ 47 | height: 0; /* 1 */ 48 | overflow: visible; /* 2 */ 49 | } 50 | 51 | /** 52 | * 1. Correct the inheritance and scaling of font size in all browsers. 53 | * 2. Correct the odd `em` font sizing in all browsers. 54 | */ 55 | 56 | pre { 57 | font-family: monospace, monospace; /* 1 */ 58 | font-size: 1em; /* 2 */ 59 | } 60 | 61 | /* Text-level semantics 62 | ========================================================================== */ 63 | 64 | /** 65 | * Remove the gray background on active links in IE 10. 66 | */ 67 | 68 | a { 69 | background-color: transparent; 70 | } 71 | 72 | /** 73 | * 1. Remove the bottom border in Chrome 57- 74 | * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. 75 | */ 76 | 77 | abbr[title] { 78 | border-bottom: none; /* 1 */ 79 | text-decoration: underline; /* 2 */ 80 | text-decoration: underline dotted; /* 2 */ 81 | } 82 | 83 | /** 84 | * Add the correct font weight in Chrome, Edge, and Safari. 85 | */ 86 | 87 | b, 88 | strong { 89 | font-weight: bolder; 90 | } 91 | 92 | /** 93 | * 1. Correct the inheritance and scaling of font size in all browsers. 94 | * 2. Correct the odd `em` font sizing in all browsers. 95 | */ 96 | 97 | code, 98 | kbd, 99 | samp { 100 | font-family: monospace, monospace; /* 1 */ 101 | font-size: 1em; /* 2 */ 102 | } 103 | 104 | /** 105 | * Add the correct font size in all browsers. 106 | */ 107 | 108 | small { 109 | font-size: 80%; 110 | } 111 | 112 | /** 113 | * Prevent `sub` and `sup` elements from affecting the line height in 114 | * all browsers. 115 | */ 116 | 117 | sub, 118 | sup { 119 | font-size: 75%; 120 | line-height: 0; 121 | position: relative; 122 | vertical-align: baseline; 123 | } 124 | 125 | sub { 126 | bottom: -0.25em; 127 | } 128 | 129 | sup { 130 | top: -0.5em; 131 | } 132 | 133 | /* Embedded content 134 | ========================================================================== */ 135 | 136 | /** 137 | * Remove the border on images inside links in IE 10. 138 | */ 139 | 140 | img { 141 | border-style: none; 142 | } 143 | 144 | /* Forms 145 | ========================================================================== */ 146 | 147 | /** 148 | * 1. Change the font styles in all browsers. 149 | * 2. Remove the margin in Firefox and Safari. 150 | */ 151 | 152 | button, 153 | input, 154 | optgroup, 155 | select, 156 | textarea { 157 | font-family: inherit; /* 1 */ 158 | font-size: 100%; /* 1 */ 159 | line-height: 1.15; /* 1 */ 160 | margin: 0; /* 2 */ 161 | } 162 | 163 | /** 164 | * Show the overflow in IE. 165 | * 1. Show the overflow in Edge. 166 | */ 167 | 168 | button, 169 | input { /* 1 */ 170 | overflow: visible; 171 | } 172 | 173 | /** 174 | * Remove the inheritance of text transform in Edge, Firefox, and IE. 175 | * 1. Remove the inheritance of text transform in Firefox. 176 | */ 177 | 178 | button, 179 | select { /* 1 */ 180 | text-transform: none; 181 | } 182 | 183 | /** 184 | * Correct the inability to style clickable types in iOS and Safari. 185 | */ 186 | 187 | button, 188 | [type="button"], 189 | [type="reset"], 190 | [type="submit"] { 191 | -webkit-appearance: button; 192 | } 193 | 194 | /** 195 | * Remove the inner border and padding in Firefox. 196 | */ 197 | 198 | button::-moz-focus-inner, 199 | [type="button"]::-moz-focus-inner, 200 | [type="reset"]::-moz-focus-inner, 201 | [type="submit"]::-moz-focus-inner { 202 | border-style: none; 203 | padding: 0; 204 | } 205 | 206 | /** 207 | * Restore the focus styles unset by the previous rule. 208 | */ 209 | 210 | button:-moz-focusring, 211 | [type="button"]:-moz-focusring, 212 | [type="reset"]:-moz-focusring, 213 | [type="submit"]:-moz-focusring { 214 | outline: 1px dotted ButtonText; 215 | } 216 | 217 | /** 218 | * Correct the padding in Firefox. 219 | */ 220 | 221 | fieldset { 222 | padding: 0.35em 0.75em 0.625em; 223 | } 224 | 225 | /** 226 | * 1. Correct the text wrapping in Edge and IE. 227 | * 2. Correct the color inheritance from `fieldset` elements in IE. 228 | * 3. Remove the padding so developers are not caught out when they zero out 229 | * `fieldset` elements in all browsers. 230 | */ 231 | 232 | legend { 233 | box-sizing: border-box; /* 1 */ 234 | color: inherit; /* 2 */ 235 | display: table; /* 1 */ 236 | max-width: 100%; /* 1 */ 237 | padding: 0; /* 3 */ 238 | white-space: normal; /* 1 */ 239 | } 240 | 241 | /** 242 | * Add the correct vertical alignment in Chrome, Firefox, and Opera. 243 | */ 244 | 245 | progress { 246 | vertical-align: baseline; 247 | } 248 | 249 | /** 250 | * Remove the default vertical scrollbar in IE 10+. 251 | */ 252 | 253 | textarea { 254 | overflow: auto; 255 | } 256 | 257 | /** 258 | * 1. Add the correct box sizing in IE 10. 259 | * 2. Remove the padding in IE 10. 260 | */ 261 | 262 | [type="checkbox"], 263 | [type="radio"] { 264 | box-sizing: border-box; /* 1 */ 265 | padding: 0; /* 2 */ 266 | } 267 | 268 | /** 269 | * Correct the cursor style of increment and decrement buttons in Chrome. 270 | */ 271 | 272 | [type="number"]::-webkit-inner-spin-button, 273 | [type="number"]::-webkit-outer-spin-button { 274 | height: auto; 275 | } 276 | 277 | /** 278 | * 1. Correct the odd appearance in Chrome and Safari. 279 | * 2. Correct the outline style in Safari. 280 | */ 281 | 282 | [type="search"] { 283 | -webkit-appearance: textfield; /* 1 */ 284 | outline-offset: -2px; /* 2 */ 285 | } 286 | 287 | /** 288 | * Remove the inner padding in Chrome and Safari on macOS. 289 | */ 290 | 291 | [type="search"]::-webkit-search-decoration { 292 | -webkit-appearance: none; 293 | } 294 | 295 | /** 296 | * 1. Correct the inability to style clickable types in iOS and Safari. 297 | * 2. Change font properties to `inherit` in Safari. 298 | */ 299 | 300 | ::-webkit-file-upload-button { 301 | -webkit-appearance: button; /* 1 */ 302 | font: inherit; /* 2 */ 303 | } 304 | 305 | /* Interactive 306 | ========================================================================== */ 307 | 308 | /* 309 | * Add the correct display in Edge, IE 10+, and Firefox. 310 | */ 311 | 312 | details { 313 | display: block; 314 | } 315 | 316 | /* 317 | * Add the correct display in all browsers. 318 | */ 319 | 320 | summary { 321 | display: list-item; 322 | } 323 | 324 | /* Misc 325 | ========================================================================== */ 326 | 327 | /** 328 | * Add the correct display in IE 10+. 329 | */ 330 | 331 | template { 332 | display: none; 333 | } 334 | 335 | /** 336 | * Add the correct display in IE 10. 337 | */ 338 | 339 | [hidden] { 340 | display: none; 341 | } 342 | -------------------------------------------------------------------------------- /src/assets/images/cart.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 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 | -------------------------------------------------------------------------------- /src/components/AllNotebooks.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 21 | 22 | 24 | 25 | -------------------------------------------------------------------------------- /src/components/AllProducts.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 20 | 21 | 59 | 60 | -------------------------------------------------------------------------------- /src/components/AllSmartphones.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 21 | 22 | 24 | 25 | -------------------------------------------------------------------------------- /src/components/Btn.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 13 | 14 | 56 | -------------------------------------------------------------------------------- /src/components/CartCheckout.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 50 | 51 | 124 | -------------------------------------------------------------------------------- /src/components/ListOfProducts.vue: -------------------------------------------------------------------------------- 1 | 24 | 25 | 50 | 51 | 94 | 95 | -------------------------------------------------------------------------------- /src/components/Mask.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 9 | 10 | 21 | -------------------------------------------------------------------------------- /src/components/Menu.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 24 | 25 | 57 | -------------------------------------------------------------------------------- /src/components/Modal.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 43 | 44 | 78 | -------------------------------------------------------------------------------- /src/components/Popupcart.vue: -------------------------------------------------------------------------------- 1 | 21 | 22 | 52 | 53 | 116 | -------------------------------------------------------------------------------- /src/components/Product.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 60 | 61 | 98 | -------------------------------------------------------------------------------- /src/components/Stars.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 13 | 14 | 38 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | // The Vue build version to load with the `import` command 2 | // (runtime-only or standalone) has been set in webpack.base.conf with an alias. 3 | import Vue from 'vue'; 4 | import App from './App'; 5 | import router from './router'; 6 | import store from './store'; 7 | 8 | Vue.config.productionTip = false; 9 | 10 | /* eslint-disable no-new */ 11 | new Vue({ 12 | el: '#app', 13 | router, 14 | store, 15 | components: { App }, 16 | template: '', 17 | }); 18 | -------------------------------------------------------------------------------- /src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import Router from 'vue-router'; 3 | import AllProducts from '../components/AllProducts'; 4 | import AllSmartphones from '../components/AllSmartphones'; 5 | import AllNotebooks from '../components/AllNotebooks'; 6 | import Product from '../components/Product'; 7 | import CartCheckout from '../components/CartCheckout'; 8 | 9 | Vue.use(Router); 10 | 11 | export default new Router({ 12 | routes: [ 13 | { 14 | path: '', 15 | name: 'All Products', 16 | component: AllProducts, 17 | }, 18 | { 19 | path: '/smartphones', 20 | name: 'Smartphones', 21 | component: AllSmartphones, 22 | }, 23 | { 24 | path: '/notebooks', 25 | name: 'Notebooks', 26 | component: AllNotebooks, 27 | }, 28 | { 29 | path: '/product-details', 30 | name: 'Product', 31 | component: Product, 32 | }, 33 | { 34 | path: '/checkout', 35 | name: 'Checkout', 36 | component: CartCheckout, 37 | }, 38 | ], 39 | }); 40 | -------------------------------------------------------------------------------- /src/store.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import Vuex from 'vuex'; 3 | 4 | Vue.use(Vuex); 5 | 6 | export default new Vuex.Store({ 7 | state: { 8 | notebooks: [ 9 | { 10 | name: 'Notebook Lenovo Ideapad 320 Intel® Core i5-7200u 8GB', 11 | price: 2259, 12 | image: 'https://images-americanas.b2w.io/produtos/01/00/item/132381/3/132381386G1.png', 13 | stars: 5, 14 | totalReviews: 230, 15 | details: 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s', 16 | }, 17 | { 18 | name: 'Notebook Dell Inspiron i15-3567-A30P Intel Core 7ª i5 4GB', 19 | price: 2284, 20 | image: 'https://images-americanas.b2w.io/produtos/01/00/item/133280/7/133280747G1.jpg', 21 | stars: 3.4, 22 | totalReviews: 20, 23 | details: 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s', 24 | }, 25 | { 26 | name: 'Notebook Samsung Essentials E21 Intel Celeron Dual Core', 27 | price: 1490, 28 | image: 'https://images-americanas.b2w.io/produtos/01/00/item/132165/8/132165801G1.jpg', 29 | stars: 1, 30 | totalReviews: 1, 31 | details: 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s', 32 | }, 33 | { 34 | name: 'Notebook Samsung Expert X22 Intel Core 7 i5 8GB', 35 | price: 2307, 36 | image: 'https://images-americanas.b2w.io/produtos/01/00/item/132260/6/132260681G1.jpg', 37 | stars: 4.4, 38 | totalReviews: 340, 39 | details: 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s', 40 | }, 41 | { 42 | name: 'Notebook VAIO Fit 15S B1211B Intel Core i5 4GB', 43 | price: 2599, 44 | image: 'https://images-americanas.b2w.io/produtos/01/00/item/133252/7/133252789G1.jpg', 45 | stars: 3, 46 | totalReviews: 30, 47 | details: 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s', 48 | }, 49 | { 50 | name: 'Notebook Dell Alienware - i7 16GB', 51 | price: 14000, 52 | image: 'https://images-submarino.b2w.io/produtos/01/00/sku/34470/9/34470934G1.jpg', 53 | stars: 2, 54 | totalReviews: 248, 55 | details: 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s', 56 | }, 57 | ], 58 | 59 | smartphones: [ 60 | { 61 | name: 'Smartphone Xiaomi Mi A1 dual Android one 7.1', 62 | price: 1199, 63 | image: 'https://images-americanas.b2w.io/produtos/01/00/sku/29296/2/29296259G1.jpg', 64 | stars: 0, 65 | totalReviews: 0, 66 | details: 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s', 67 | }, 68 | { 69 | name: 'Smartphone Moto G 5S Dual Chip Android 7.0', 70 | price: 929, 71 | image: 'https://images-americanas.b2w.io/produtos/01/00/item/132474/0/132474081G1.png', 72 | stars: 1.5, 73 | totalReviews: 11, 74 | details: 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s', 75 | }, 76 | { 77 | name: 'iPhone 8 Dourado 64GB Tela 4.7" IOS 11', 78 | price: 3949, 79 | image: 'https://images-americanas.b2w.io/produtos/01/00/item/132651/7/132651745G1.jpg', 80 | stars: 1, 81 | totalReviews: 2, 82 | details: 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s', 83 | }, 84 | { 85 | name: 'Smartphone Samsung Galaxy S7 Edge', 86 | price: 1943, 87 | image: 'https://images-americanas.b2w.io/produtos/01/00/item/125911/8/125911828G1.png', 88 | stars: 5, 89 | totalReviews: 310, 90 | details: 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s', 91 | }, 92 | { 93 | name: 'Smartphone Motorola Moto G6 Plus', 94 | price: 1699, 95 | image: 'https://images-americanas.b2w.io/produtos/01/00/item/133453/1/133453185G1.jpg', 96 | stars: 2.9, 97 | totalReviews: 42, 98 | details: 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s', 99 | }, 100 | { 101 | name: 'Smartphone Motorola Moto Z3 Play', 102 | price: 2999, 103 | image: 'https://images-submarino.b2w.io/produtos/01/00/item/133666/1/133666164G1.jpg', 104 | stars: 0.5, 105 | totalReviews: 1, 106 | details: 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s', 107 | }, 108 | ], 109 | 110 | cartProducts: [], 111 | currentProduct: {}, 112 | showModal: false, 113 | showPopupCart: false, 114 | }, 115 | 116 | getters: { 117 | getNotebooks: state => state.notebooks, 118 | getSmartphones: state => state.smartphones, 119 | getAllProducts: state => state.notebooks.concat(state.smartphones), 120 | getProductsInCart: state => state.cartProducts, 121 | getCurrentProduct: state => state.currentProduct, 122 | getShowModal: state => state.showModal, 123 | getPopupCart: state => state.showPopupCart, 124 | }, 125 | 126 | mutations: { 127 | ADD_PRODUCT: (state, product) => { 128 | state.cartProducts.push(product); 129 | }, 130 | REMOVE_PRODUCT: (state, index) => { 131 | state.cartProducts.splice(index, 1); 132 | }, 133 | CURRENT_PRODUCT: (state, product) => { 134 | state.currentProduct = product; 135 | }, 136 | SHOW_MODAL: (state) => { 137 | state.showModal = !state.showModal; 138 | }, 139 | SHOW_POPUP_CART: (state) => { 140 | state.showPopupCart = !state.showPopupCart; 141 | }, 142 | }, 143 | 144 | actions: { 145 | addProduct: (context, product) => { 146 | context.commit('ADD_PRODUCT', product); 147 | }, 148 | removeProduct: (context, index) => { 149 | context.commit('REMOVE_PRODUCT', index); 150 | }, 151 | currentProduct: (context, product) => { 152 | context.commit('CURRENT_PRODUCT', product); 153 | }, 154 | showOrHiddenModal: (context) => { 155 | context.commit('SHOW_MODAL'); 156 | }, 157 | showOrHiddenPopupCart: (context) => { 158 | context.commit('SHOW_POPUP_CART'); 159 | }, 160 | }, 161 | }); 162 | -------------------------------------------------------------------------------- /static/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crisgon/vue-cart/c7bb886f6133ff8f950de2555558b0ed4950db76/static/.gitkeep --------------------------------------------------------------------------------