├── .dockerignore
├── public
├── favicon.ico
└── index.html
├── screenshot
├── mobile-1.png
├── mobile-2.png
├── pagina-1.png
├── pagina-2.png
├── popup-1.png
└── popup-2.png
├── babel.config.js
├── src
├── assets
│ └── logo.png
├── pages
│ ├── Root.vue
│ ├── Home.vue
│ └── Basket.vue
├── utils
│ ├── source
│ │ ├── toJson.js
│ │ ├── joinInGroups.js
│ │ ├── parseData.js
│ │ └── localStorage
│ │ │ ├── index.js
│ │ │ └── utils
│ │ │ └── index.js
│ └── index.js
├── store
│ ├── modules
│ │ ├── static.js
│ │ ├── popUp.js
│ │ ├── headerVisible.js
│ │ ├── menuItems.js
│ │ └── shoppingBasket.js
│ └── index.js
├── main.js
├── components
│ ├── source
│ │ ├── Container.vue
│ │ ├── Footer.vue
│ │ ├── Loading.vue
│ │ ├── Header.vue
│ │ ├── Card.vue
│ │ └── PopUp.vue
│ └── index.js
├── icons
│ ├── source
│ │ ├── SendIcon.vue
│ │ ├── MinusIcon.vue
│ │ ├── ArrowBackIcon.vue
│ │ ├── InstagramIcon.vue
│ │ ├── PlusIcon.vue
│ │ ├── PizzaIcon.vue
│ │ ├── PhoneIcon.vue
│ │ ├── TrashIcon.vue
│ │ ├── KnifeForkIcon.vue
│ │ ├── BasketIcon.vue
│ │ ├── WhatsappIcon.vue
│ │ ├── HamburguerIcon.vue
│ │ ├── DrinkIcon.vue
│ │ └── LogoIcon.vue
│ └── index.js
├── router
│ └── index.js
└── App.vue
├── vue.config.js
├── .gitignore
├── docker-compose.yml
├── package.json
├── LICENSE
└── README.md
/.dockerignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 |
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danroxha/digital-menu/HEAD/public/favicon.ico
--------------------------------------------------------------------------------
/screenshot/mobile-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danroxha/digital-menu/HEAD/screenshot/mobile-1.png
--------------------------------------------------------------------------------
/screenshot/mobile-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danroxha/digital-menu/HEAD/screenshot/mobile-2.png
--------------------------------------------------------------------------------
/screenshot/pagina-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danroxha/digital-menu/HEAD/screenshot/pagina-1.png
--------------------------------------------------------------------------------
/screenshot/pagina-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danroxha/digital-menu/HEAD/screenshot/pagina-2.png
--------------------------------------------------------------------------------
/screenshot/popup-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danroxha/digital-menu/HEAD/screenshot/popup-1.png
--------------------------------------------------------------------------------
/screenshot/popup-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danroxha/digital-menu/HEAD/screenshot/popup-2.png
--------------------------------------------------------------------------------
/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: [
3 | '@vue/cli-plugin-babel/preset'
4 | ]
5 | }
6 |
--------------------------------------------------------------------------------
/src/assets/logo.png:
--------------------------------------------------------------------------------
1 | version https://git-lfs.github.com/spec/v1
2 | oid sha256:03d6d6da2545d3b3402855b8e721b779abaa87d113e69d9329ea6ea6325a83ce
3 | size 6849
4 |
--------------------------------------------------------------------------------
/src/pages/Root.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
10 |
--------------------------------------------------------------------------------
/src/utils/source/toJson.js:
--------------------------------------------------------------------------------
1 | export default function toJSON(arr){
2 |
3 | let obj = {}
4 |
5 | for(let i = 0; i < arr.length; i++){
6 | if(i % 2 == 0){
7 | obj[arr[i]] = arr[i+1]
8 | }
9 | }
10 | return obj
11 | }
--------------------------------------------------------------------------------
/src/store/modules/static.js:
--------------------------------------------------------------------------------
1 |
2 | export default {
3 | namespaced: true,
4 | state: {
5 | phone: '+5598988998019',
6 | instagram: 'https://www.instagram.com/pizzariacolosso/?igshid=1h7f4x1saumts',
7 | },
8 | actions: {},
9 | gettets: {},
10 | }
11 |
--------------------------------------------------------------------------------
/src/main.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from '@/App.vue'
3 | import store from '@/store'
4 | import router from '@/router'
5 |
6 | Vue.config.productionTip = false
7 |
8 | new Vue({
9 | render: h => h(App),
10 | store,
11 | router,
12 | }).$mount('#app')
13 |
--------------------------------------------------------------------------------
/src/utils/index.js:
--------------------------------------------------------------------------------
1 | export { default as toJSON } from './source/toJson.js'
2 | export { default as joinInGroups } from './source/joinInGroups.js'
3 | export { default as parseData } from './source/parseData.js'
4 | export { default as LocalStorage } from './source/localStorage/index.js'
--------------------------------------------------------------------------------
/vue.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | publicPath: '/digital-menu',
3 | outputDir: '../digital-menu-build',
4 | chainWebpack: (config) => {
5 | config
6 | .plugin('html')
7 | .tap((args) => {
8 | args[0].title = 'Menu Colosso';
9 | return args;
10 | });
11 | },
12 | }
--------------------------------------------------------------------------------
/src/components/source/Container.vue:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
--------------------------------------------------------------------------------
/src/utils/source/joinInGroups.js:
--------------------------------------------------------------------------------
1 | export default function joinInGroups(data){
2 |
3 | let group = new Object()
4 |
5 | for(var item of data){
6 | if(!Object.prototype.hasOwnProperty.call(group, item?.group)){
7 | group[item.group] = [item]
8 | continue
9 | }
10 | group[item.group].push(item)
11 | }
12 |
13 | return group
14 | }
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | package-lock.json
2 | .DS_Store
3 | node_modules
4 | /dist
5 |
6 |
7 |
8 | # local env files
9 | .env.local
10 | .env.*.local
11 |
12 | # Log files
13 | npm-debug.log*
14 | yarn-debug.log*
15 | yarn-error.log*
16 | pnpm-debug.log*
17 |
18 | # Editor directories and files
19 | .idea
20 | .vscode
21 | *.suo
22 | *.ntvs*
23 | *.njsproj
24 | *.sln
25 | *.sw?
26 |
--------------------------------------------------------------------------------
/src/components/index.js:
--------------------------------------------------------------------------------
1 | export { default as Card } from './source/Card.vue'
2 | export { default as Container } from './source/Container.vue'
3 | export { default as Footer } from './source/Footer.vue'
4 | export { default as Header } from './source/Header.vue'
5 | export { default as PopUp } from './source/PopUp.vue'
6 | export { default as Loading } from './source/Loading.vue'
7 |
8 |
--------------------------------------------------------------------------------
/src/icons/source/SendIcon.vue:
--------------------------------------------------------------------------------
1 |
2 |
11 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/src/store/modules/popUp.js:
--------------------------------------------------------------------------------
1 | export default {
2 | namespaced: true,
3 |
4 | state: {
5 | visible: false,
6 | data: {}
7 | },
8 |
9 | mutations: {
10 | openPopUp: (state, data) => {
11 | state.visible = true
12 | state.data = data
13 | },
14 | closePopUp: state => state.visible = false,
15 | },
16 |
17 | actions: {},
18 |
19 | gettets: {},
20 | }
--------------------------------------------------------------------------------
/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: '3.9'
2 | services:
3 | develop:
4 | image: 'node:16.8-alpine3.11'
5 | container_name: digital-menu-app
6 | restart: always
7 | working_dir: /home/digitalmenu/app
8 | ports:
9 | - 8080:8080
10 | volumes:
11 | - .:/home/digitalmenu/app
12 | - ./node_modules:/home/digitalmenu/app/node_modules
13 | command: "sh -c 'npm install && npm run serve'"
14 |
--------------------------------------------------------------------------------
/src/icons/source/MinusIcon.vue:
--------------------------------------------------------------------------------
1 |
2 |
11 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/src/icons/source/ArrowBackIcon.vue:
--------------------------------------------------------------------------------
1 |
2 |
12 |
15 |
16 |
17 | >
--------------------------------------------------------------------------------
/src/store/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import Vuex from 'vuex'
3 | import menuItems from './modules/menuItems'
4 | import popUp from './modules/popUp'
5 | import shoppingBasket from './modules/shoppingBasket'
6 | import statics from './modules/static'
7 | import headerVisible from './modules/headerVisible'
8 |
9 | Vue.use(Vuex)
10 |
11 |
12 | export default new Vuex.Store({
13 | modules: {
14 | menuItems,
15 | popUp,
16 | shoppingBasket,
17 | statics,
18 | headerVisible,
19 | }
20 | })
--------------------------------------------------------------------------------
/src/icons/source/InstagramIcon.vue:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/src/utils/source/parseData.js:
--------------------------------------------------------------------------------
1 | /**
2 | *
3 | * @param {JSON} table JSON from Google SpreadSheet
4 | * @returns JSON clean
5 | */
6 | export default function parseData({table}) {
7 | return table.rows.map(row => [
8 | ...table.cols.map((col, index) => ({ [col.label]: row.c[index].v,}))
9 | ]
10 | )
11 | .map(data =>
12 | data.reduce((acc, value) => ({...acc, ...value}), {})
13 | )
14 | .map(tuple => ({
15 | ...tuple,
16 | ingredientes: tuple.ingredientes.replace(/\s+/ig, '').split(";")
17 | }));
18 | }
--------------------------------------------------------------------------------
/src/router/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import Router from 'vue-router'
3 |
4 | import Home from '@/pages/Home'
5 | import Basket from '@/pages/Basket'
6 |
7 | Vue.use(Router)
8 |
9 | export default new Router({
10 | routes: [
11 | {
12 | name: 'default',
13 | path: '*',
14 | component: Home,
15 | },
16 | {
17 | name: 'home',
18 | path: '/',
19 | component: Home,
20 | },
21 | {
22 | name: 'basket',
23 | path: '/basket',
24 | component: Basket,
25 | }
26 | ]
27 | })
28 |
--------------------------------------------------------------------------------
/src/store/modules/headerVisible.js:
--------------------------------------------------------------------------------
1 | export default {
2 | namespaced: true,
3 |
4 | state: {
5 | visible: true,
6 | otherCondicion: true,
7 | },
8 |
9 | mutations: {
10 | onMoveScroll: (state, event) =>
11 | state.visible = event.target.scrollTop < 70 && state.otherCondicion,
12 | changeOtherCondicion: (state, bool) =>
13 | state.otherCondicion = bool,
14 | al: (state) => console.log('Chamou ' + state.otherCondicion),
15 | },
16 |
17 | actions: {},
18 |
19 | gettets: {},
20 | }
--------------------------------------------------------------------------------
/src/utils/source/localStorage/index.js:
--------------------------------------------------------------------------------
1 | import Tools from './utils/index.js'
2 |
3 | export default class LocalStorage {
4 |
5 | static async findAll(setting){
6 |
7 | if(setting.localStorage.getItem(setting.storage))
8 | return Tools.JSONToMap(setting.localStorage.getItem(setting.storage))
9 |
10 | return new Map()
11 |
12 | }
13 |
14 | static async updateAll(setting, data){
15 | setting.localStorage.setItem(setting.storage, Tools.MapToJSON(data))
16 | }
17 |
18 | static async removeAll(setting) {
19 | setting.localStorage.removeItem(setting.storage)
20 | }
21 | }
--------------------------------------------------------------------------------
/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | <%= htmlWebpackPlugin.options.title %>
9 |
10 |
11 |
12 | We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/src/icons/source/PlusIcon.vue:
--------------------------------------------------------------------------------
1 |
2 |
14 |
15 |
18 |
19 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/src/icons/source/PizzaIcon.vue:
--------------------------------------------------------------------------------
1 |
2 |
11 |
14 |
15 |
--------------------------------------------------------------------------------
/src/icons/source/PhoneIcon.vue:
--------------------------------------------------------------------------------
1 |
2 |
7 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/src/utils/source/localStorage/utils/index.js:
--------------------------------------------------------------------------------
1 | // https://2ality.com/2015/08/es6-map-json.html
2 |
3 | export default class Tools {
4 |
5 | static MapToObject(map) {
6 |
7 | let object = Object.create(null)
8 |
9 | for (let [key, value] of map)
10 | object[key] = value
11 |
12 | return object
13 | }
14 |
15 | static ObjectToMap(object) {
16 |
17 | let map = new Map()
18 |
19 | for (let key of Object.keys(object))
20 | map.set(key, object[key])
21 |
22 | return map
23 | }
24 |
25 | static MapToJSON(map) {
26 | return JSON.stringify(Tools.MapToObject(map))
27 | }
28 |
29 | static JSONToMap(json) {
30 | return Tools.ObjectToMap(JSON.parse(json))
31 | }
32 |
33 | }
--------------------------------------------------------------------------------
/src/icons/source/TrashIcon.vue:
--------------------------------------------------------------------------------
1 |
2 |
13 |
14 |
15 |
18 |
19 |
23 |
24 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/src/store/modules/menuItems.js:
--------------------------------------------------------------------------------
1 | import { joinInGroups, parseData } from '../../utils'
2 |
3 |
4 | export default {
5 | namespaced: true,
6 |
7 | state: {
8 | items: [],
9 | isEmpty: true
10 | },
11 |
12 | mutations: {},
13 |
14 | actions: {
15 | async ['loadData']({state}){
16 |
17 | const id = '1Hrhw7xC5NFxNyblD7aZ7afD1DFzHlSsQidav0e6Hshw'
18 | const url = `https://docs.google.com/spreadsheets/d/${id}/gviz/tq?tqx=out:json`
19 |
20 | state.items = await fetch(url)
21 | .then(res => res.text()).then(text => JSON.parse(text.substr(47).slice(0, -2)))
22 | .then(json => joinInGroups(parseData(json)))
23 |
24 | state.isEmpty = !!state.items.length
25 | },
26 | },
27 | gettets: {},
28 | }
--------------------------------------------------------------------------------
/src/icons/index.js:
--------------------------------------------------------------------------------
1 | export { default as ArrowBackIcon } from './source/ArrowBackIcon.vue'
2 | export { default as BasketIcon } from './source/BasketIcon.vue'
3 | export { default as DrinkIcon } from './source/DrinkIcon.vue'
4 | export { default as HamburguerIcon } from './source/HamburguerIcon.vue'
5 | export { default as InstagramIcon } from './source/InstagramIcon.vue'
6 | export { default as KnifeForkIcon } from './source/KnifeForkIcon.vue'
7 | export { default as LogoIcon } from './source/LogoIcon.vue'
8 | export { default as MinusIcon } from './source/MinusIcon.vue'
9 | export { default as PhoneIcon } from './source/PhoneIcon.vue'
10 | export { default as PlusIcon } from './source/PlusIcon.vue'
11 | export { default as PizzaIcon } from './source/PizzaIcon.vue'
12 | export { default as TrashIcon } from './source/TrashIcon.vue'
13 | export { default as SendIcon } from './source/SendIcon.vue'
14 | export { default as WhatsappIcon } from './source/WhatsappIcon.vue'
15 |
--------------------------------------------------------------------------------
/src/icons/source/KnifeForkIcon.vue:
--------------------------------------------------------------------------------
1 |
2 |
11 |
14 |
15 |
--------------------------------------------------------------------------------
/src/icons/source/BasketIcon.vue:
--------------------------------------------------------------------------------
1 |
2 |
10 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "digital-menu",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "serve": "vue-cli-service serve",
7 | "build": "vue-cli-service build",
8 | "lint": "vue-cli-service lint"
9 | },
10 | "dependencies": {
11 | "core-js": "^3.6.5",
12 | "vue": "^2.6.11",
13 | "vue-router": "^3.4.3",
14 | "vuex": "^3.5.1"
15 | },
16 | "devDependencies": {
17 | "@vue/cli-plugin-babel": "~4.5.0",
18 | "@vue/cli-plugin-eslint": "~4.5.0",
19 | "@vue/cli-service": "~4.5.0",
20 | "babel-eslint": "^10.1.0",
21 | "eslint": "^6.7.2",
22 | "eslint-plugin-vue": "^6.2.2",
23 | "vue-template-compiler": "^2.6.11"
24 | },
25 | "eslintConfig": {
26 | "root": true,
27 | "env": {
28 | "node": true
29 | },
30 | "extends": [
31 | "plugin:vue/essential",
32 | "eslint:recommended"
33 | ],
34 | "parserOptions": {
35 | "parser": "babel-eslint"
36 | },
37 | "rules": {}
38 | },
39 | "browserslist": [
40 | "> 1%",
41 | "last 2 versions",
42 | "not dead"
43 | ]
44 | }
45 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 Daniel Rocha
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/src/pages/Home.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
11 |
14 |
15 |
16 |
17 |
18 |
41 |
42 |
--------------------------------------------------------------------------------
/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
20 |
54 |
--------------------------------------------------------------------------------
/src/components/source/Footer.vue:
--------------------------------------------------------------------------------
1 |
2 |
16 |
17 |
18 |
30 |
31 |
--------------------------------------------------------------------------------
/src/icons/source/WhatsappIcon.vue:
--------------------------------------------------------------------------------
1 |
2 |
10 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/src/store/modules/shoppingBasket.js:
--------------------------------------------------------------------------------
1 | import { LocalStorage } from '../../utils/index.js'
2 |
3 |
4 | export default {
5 | namespaced: true,
6 |
7 | state: {
8 | shoppingBasket: new Map(),
9 | volume: 0,
10 | setting: {
11 | storage: 'shoppingBasket',
12 | localStorage: null,
13 | }
14 | },
15 |
16 | mutations: {
17 |
18 | async addItemToBasket(state, data) {
19 | let { item, quantity } = data
20 | quantity = parseInt(quantity)
21 |
22 | if(state.shoppingBasket.has(item?.nome) ){
23 | quantity += state.shoppingBasket.get(item?.nome).quantity
24 | state.shoppingBasket.set(item?.nome, {item, quantity })
25 |
26 | await LocalStorage.updateAll(state.setting, state.shoppingBasket )
27 |
28 | }else {
29 | state.shoppingBasket.set(item?.nome, { item, quantity })
30 | await LocalStorage.updateAll(state.setting, state.shoppingBasket )
31 | }
32 |
33 | state.volume = state.shoppingBasket.size
34 |
35 | },
36 |
37 | removeAll(state) {
38 | state.shoppingBasket.clear()
39 | state.volume = state.shoppingBasket.size
40 | LocalStorage.removeAll(state.setting)
41 | },
42 |
43 | removeItemFromBasket(state, itemName) {
44 | state.shoppingBasket.delete(itemName)
45 | },
46 |
47 | setLocalStorage(state, instance) {
48 | state.setting.localStorage = instance
49 | }
50 | },
51 |
52 | actions: {
53 |
54 | loadShoppingBasket: async ({state}) => {
55 | state.shoppingBasket = await LocalStorage.findAll(state.setting)
56 | state.volume = state.shoppingBasket.size
57 | },
58 |
59 | },
60 |
61 | gettets: {},
62 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | 
2 | 
3 | 
4 | 
5 |
6 | # Digital Menu
7 | Cardápio online de fácil gerenciamento. Aplicação web para apresentar um cardápio de lanchonete de forma online e com redirecionamento dos pedidos para Whatsapp. O cardápio é gerenciado por uma planilha (Google Sheets), na qual mudanças na planilha refletem nos dados do cardápio.
8 |
9 |
10 | Cardápio: [Google SpreadSheet](https://docs.google.com/spreadsheets/d/1Hrhw7xC5NFxNyblD7aZ7afD1DFzHlSsQidav0e6Hshw/edit?usp=sharing)
11 |
12 | Página: https://pizzariacolosso.github.io/digital-menu/
13 |
14 | ## Screenshot
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 | ## Observação
29 | Como não é usado uma API personalizada para aplicação, os dados do cardápio podem se torna inacessível caso o google remova ou altere a URL de obtenção dos dados.
30 |
31 | ## Project setup
32 | * :pushpin: **
33 | * :pushpin: **
34 |
35 | ### Run
36 |
37 | ```
38 | docker-compose up --build
39 | ```
40 |
--------------------------------------------------------------------------------
/src/icons/source/HamburguerIcon.vue:
--------------------------------------------------------------------------------
1 |
2 |
11 |
14 |
15 |
--------------------------------------------------------------------------------
/src/components/source/Loading.vue:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/src/components/source/Header.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
9 |
18 |
19 |
20 |
21 |
47 |
48 |
--------------------------------------------------------------------------------
/src/icons/source/DrinkIcon.vue:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 | Created by potrace 1.16, written by Peter Selinger 2001-2019
14 |
15 |
16 |
19 |
22 |
24 |
27 |
28 |
31 |
34 |
37 |
38 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/src/pages/Basket.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
15 |
16 | Limpar
17 |
27 |
28 |
A sua cesta está vazio
29 |
30 | Adicione seu lanche favorito aqui!
31 |
32 |
33 |
34 |
35 |
36 |
37 |
70 |
71 |
--------------------------------------------------------------------------------
/src/components/source/Card.vue:
--------------------------------------------------------------------------------
1 |
2 |
21 |
22 |
23 |
64 |
65 |
--------------------------------------------------------------------------------
/src/components/source/PopUp.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Detalhes do Item
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
{{ data.nome }}
14 |
{{ data.ingredientes.join(", ") }}
15 |
16 |
R$ {{ data.preco }}
17 |
18 |
19 |
33 |
34 |
35 |
36 |
37 |
72 |
73 |
--------------------------------------------------------------------------------
/src/icons/source/LogoIcon.vue:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
8 |
826 |
910 |
975 |
981 |
987 |
992 |
996 |
1001 |
1004 |
1008 |
1012 |
1016 |
1017 |
1018 |
1019 |
--------------------------------------------------------------------------------