Friends with components
This commit is contained in:
		
							parent
							
								
									87fa50944e
								
							
						
					
					
						commit
						8d280d0a3e
					
				
							
								
								
									
										28
									
								
								friendslist-with-components/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								friendslist-with-components/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,28 @@ | |||||||
|  | # Logs | ||||||
|  | logs | ||||||
|  | *.log | ||||||
|  | npm-debug.log* | ||||||
|  | yarn-debug.log* | ||||||
|  | yarn-error.log* | ||||||
|  | pnpm-debug.log* | ||||||
|  | lerna-debug.log* | ||||||
|  | 
 | ||||||
|  | node_modules | ||||||
|  | .DS_Store | ||||||
|  | dist | ||||||
|  | dist-ssr | ||||||
|  | coverage | ||||||
|  | *.local | ||||||
|  | 
 | ||||||
|  | /cypress/videos/ | ||||||
|  | /cypress/screenshots/ | ||||||
|  | 
 | ||||||
|  | # Editor directories and files | ||||||
|  | .vscode/* | ||||||
|  | !.vscode/extensions.json | ||||||
|  | .idea | ||||||
|  | *.suo | ||||||
|  | *.ntvs* | ||||||
|  | *.njsproj | ||||||
|  | *.sln | ||||||
|  | *.sw? | ||||||
							
								
								
									
										3
									
								
								friendslist-with-components/.vscode/extensions.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								friendslist-with-components/.vscode/extensions.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | |||||||
|  | { | ||||||
|  |   "recommendations": ["Vue.volar", "Vue.vscode-typescript-vue-plugin"] | ||||||
|  | } | ||||||
							
								
								
									
										29
									
								
								friendslist-with-components/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								friendslist-with-components/README.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,29 @@ | |||||||
|  | # friendslist-with-components | ||||||
|  | 
 | ||||||
|  | This template should help get you started developing with Vue 3 in Vite. | ||||||
|  | 
 | ||||||
|  | ## Recommended IDE Setup | ||||||
|  | 
 | ||||||
|  | [VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin). | ||||||
|  | 
 | ||||||
|  | ## Customize configuration | ||||||
|  | 
 | ||||||
|  | See [Vite Configuration Reference](https://vitejs.dev/config/). | ||||||
|  | 
 | ||||||
|  | ## Project Setup | ||||||
|  | 
 | ||||||
|  | ```sh | ||||||
|  | npm install | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | ### Compile and Hot-Reload for Development | ||||||
|  | 
 | ||||||
|  | ```sh | ||||||
|  | npm run dev | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | ### Compile and Minify for Production | ||||||
|  | 
 | ||||||
|  | ```sh | ||||||
|  | npm run build | ||||||
|  | ``` | ||||||
							
								
								
									
										13
									
								
								friendslist-with-components/index.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								friendslist-with-components/index.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,13 @@ | |||||||
|  | <!DOCTYPE html> | ||||||
|  | <html lang="en"> | ||||||
|  |   <head> | ||||||
|  |     <meta charset="UTF-8" /> | ||||||
|  |     <link rel="icon" href="/favicon.ico" /> | ||||||
|  |     <meta name="viewport" content="width=device-width, initial-scale=1.0" /> | ||||||
|  |     <title>Friendslist with components</title> | ||||||
|  |   </head> | ||||||
|  |   <body> | ||||||
|  |     <div id="app"></div> | ||||||
|  |     <script type="module" src="/src/main.js"></script> | ||||||
|  |   </body> | ||||||
|  | </html> | ||||||
							
								
								
									
										1205
									
								
								friendslist-with-components/package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										1205
									
								
								friendslist-with-components/package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										16
									
								
								friendslist-with-components/package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								friendslist-with-components/package.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,16 @@ | |||||||
|  | { | ||||||
|  |   "name": "friendslist-with-components", | ||||||
|  |   "version": "0.0.0", | ||||||
|  |   "scripts": { | ||||||
|  |     "dev": "vite", | ||||||
|  |     "build": "vite build", | ||||||
|  |     "preview": "vite preview" | ||||||
|  |   }, | ||||||
|  |   "dependencies": { | ||||||
|  |     "vue": "^3.2.41" | ||||||
|  |   }, | ||||||
|  |   "devDependencies": { | ||||||
|  |     "@vitejs/plugin-vue": "^3.1.2", | ||||||
|  |     "vite": "^3.1.8" | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										
											BIN
										
									
								
								friendslist-with-components/public/favicon.ico
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								friendslist-with-components/public/favicon.ico
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 4.2 KiB | 
							
								
								
									
										106
									
								
								friendslist-with-components/src/App.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								friendslist-with-components/src/App.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,106 @@ | |||||||
|  | <template> | ||||||
|  |   <header> | ||||||
|  |     <h1>FriendList</h1> | ||||||
|  |   </header> | ||||||
|  |   <section id="app"> | ||||||
|  |     <ul> | ||||||
|  |       <FriendCard | ||||||
|  |         v-for="friend in friends" | ||||||
|  |         :key="friend.name" | ||||||
|  |         :friend="friend" | ||||||
|  |       ></FriendCard> | ||||||
|  |     </ul> | ||||||
|  |   </section> | ||||||
|  | </template> | ||||||
|  | 
 | ||||||
|  | <script> | ||||||
|  | import FriendCard from "@/components/FriendCard.vue"; | ||||||
|  | export default { | ||||||
|  |   components: { | ||||||
|  |     FriendCard, | ||||||
|  |   }, | ||||||
|  |   data: () => ({ | ||||||
|  |     friends: [ | ||||||
|  |       { | ||||||
|  |         name: "Manuel Lorenz", | ||||||
|  |         phone: "01234 5678 991", | ||||||
|  |         email: "manuel@localhost.com", | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         name: "Julie Jones", | ||||||
|  |         phone: "09876 543 221", | ||||||
|  |         email: "julie@localhost.com", | ||||||
|  |       }, | ||||||
|  |     ], | ||||||
|  |   }), | ||||||
|  |   methods: {}, | ||||||
|  |   computed: {}, | ||||||
|  |   watch: {}, | ||||||
|  | }; | ||||||
|  | </script> | ||||||
|  | 
 | ||||||
|  | <style> | ||||||
|  | * { | ||||||
|  |   box-sizing: border-box; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | html { | ||||||
|  |   font-family: "Jost", sans-serif; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | body { | ||||||
|  |   margin: 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | header { | ||||||
|  |   box-shadow: 0 2px 8px rgba(0, 0, 0, 0.26); | ||||||
|  |   margin: 3rem auto; | ||||||
|  |   border-radius: 10px; | ||||||
|  |   padding: 1rem; | ||||||
|  |   background-color: #58004d; | ||||||
|  |   color: white; | ||||||
|  |   text-align: center; | ||||||
|  |   width: 90%; | ||||||
|  |   max-width: 40rem; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #app ul { | ||||||
|  |   margin: 0; | ||||||
|  |   padding: 0; | ||||||
|  |   list-style: none; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #app li { | ||||||
|  |   box-shadow: 0 2px 8px rgba(0, 0, 0, 0.26); | ||||||
|  |   margin: 1rem auto; | ||||||
|  |   border-radius: 10px; | ||||||
|  |   padding: 1rem; | ||||||
|  |   text-align: center; | ||||||
|  |   width: 90%; | ||||||
|  |   max-width: 40rem; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #app h2 { | ||||||
|  |   font-size: 2rem; | ||||||
|  |   border-bottom: 4px solid #ccc; | ||||||
|  |   color: #58004d; | ||||||
|  |   margin: 0 0 1rem 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #app button { | ||||||
|  |   font: inherit; | ||||||
|  |   cursor: pointer; | ||||||
|  |   border: 1px solid #ff0077; | ||||||
|  |   background-color: #ff0077; | ||||||
|  |   color: white; | ||||||
|  |   padding: 0.05rem 1rem; | ||||||
|  |   box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.26); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #app button:hover, | ||||||
|  | #app button:active { | ||||||
|  |   background-color: #ec3169; | ||||||
|  |   border-color: #ec3169; | ||||||
|  |   box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.26); | ||||||
|  | } | ||||||
|  | </style> | ||||||
							
								
								
									
										74
									
								
								friendslist-with-components/src/assets/base.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								friendslist-with-components/src/assets/base.css
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,74 @@ | |||||||
|  | /* color palette from <https://github.com/vuejs/theme> */ | ||||||
|  | :root { | ||||||
|  |   --vt-c-white: #ffffff; | ||||||
|  |   --vt-c-white-soft: #f8f8f8; | ||||||
|  |   --vt-c-white-mute: #f2f2f2; | ||||||
|  | 
 | ||||||
|  |   --vt-c-black: #181818; | ||||||
|  |   --vt-c-black-soft: #222222; | ||||||
|  |   --vt-c-black-mute: #282828; | ||||||
|  | 
 | ||||||
|  |   --vt-c-indigo: #2c3e50; | ||||||
|  | 
 | ||||||
|  |   --vt-c-divider-light-1: rgba(60, 60, 60, 0.29); | ||||||
|  |   --vt-c-divider-light-2: rgba(60, 60, 60, 0.12); | ||||||
|  |   --vt-c-divider-dark-1: rgba(84, 84, 84, 0.65); | ||||||
|  |   --vt-c-divider-dark-2: rgba(84, 84, 84, 0.48); | ||||||
|  | 
 | ||||||
|  |   --vt-c-text-light-1: var(--vt-c-indigo); | ||||||
|  |   --vt-c-text-light-2: rgba(60, 60, 60, 0.66); | ||||||
|  |   --vt-c-text-dark-1: var(--vt-c-white); | ||||||
|  |   --vt-c-text-dark-2: rgba(235, 235, 235, 0.64); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* semantic color variables for this project */ | ||||||
|  | :root { | ||||||
|  |   --color-background: var(--vt-c-white); | ||||||
|  |   --color-background-soft: var(--vt-c-white-soft); | ||||||
|  |   --color-background-mute: var(--vt-c-white-mute); | ||||||
|  | 
 | ||||||
|  |   --color-border: var(--vt-c-divider-light-2); | ||||||
|  |   --color-border-hover: var(--vt-c-divider-light-1); | ||||||
|  | 
 | ||||||
|  |   --color-heading: var(--vt-c-text-light-1); | ||||||
|  |   --color-text: var(--vt-c-text-light-1); | ||||||
|  | 
 | ||||||
|  |   --section-gap: 160px; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | @media (prefers-color-scheme: dark) { | ||||||
|  |   :root { | ||||||
|  |     --color-background: var(--vt-c-black); | ||||||
|  |     --color-background-soft: var(--vt-c-black-soft); | ||||||
|  |     --color-background-mute: var(--vt-c-black-mute); | ||||||
|  | 
 | ||||||
|  |     --color-border: var(--vt-c-divider-dark-2); | ||||||
|  |     --color-border-hover: var(--vt-c-divider-dark-1); | ||||||
|  | 
 | ||||||
|  |     --color-heading: var(--vt-c-text-dark-1); | ||||||
|  |     --color-text: var(--vt-c-text-dark-2); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | *, | ||||||
|  | *::before, | ||||||
|  | *::after { | ||||||
|  |   box-sizing: border-box; | ||||||
|  |   margin: 0; | ||||||
|  |   position: relative; | ||||||
|  |   font-weight: normal; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | body { | ||||||
|  |   min-height: 100vh; | ||||||
|  |   color: var(--color-text); | ||||||
|  |   background: var(--color-background); | ||||||
|  |   transition: color 0.5s, background-color 0.5s; | ||||||
|  |   line-height: 1.6; | ||||||
|  |   font-family: Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, | ||||||
|  |     Cantarell, 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif; | ||||||
|  |   font-size: 15px; | ||||||
|  |   text-rendering: optimizeLegibility; | ||||||
|  |   -webkit-font-smoothing: antialiased; | ||||||
|  |   -moz-osx-font-smoothing: grayscale; | ||||||
|  | } | ||||||
							
								
								
									
										1
									
								
								friendslist-with-components/src/assets/logo.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								friendslist-with-components/src/assets/logo.svg
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | |||||||
|  | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 261.76 226.69"  xmlns:v="https://vecta.io/nano"><path d="M161.096.001l-30.225 52.351L100.647.001H-.005l130.877 226.688L261.749.001z" fill="#41b883"/><path d="M161.096.001l-30.225 52.351L100.647.001H52.346l78.526 136.01L209.398.001z" fill="#34495e"/></svg> | ||||||
| After Width: | Height: | Size: 308 B | 
							
								
								
									
										35
									
								
								friendslist-with-components/src/assets/main.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								friendslist-with-components/src/assets/main.css
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,35 @@ | |||||||
|  | @import './base.css'; | ||||||
|  | 
 | ||||||
|  | #app { | ||||||
|  |   max-width: 1280px; | ||||||
|  |   margin: 0 auto; | ||||||
|  |   padding: 2rem; | ||||||
|  | 
 | ||||||
|  |   font-weight: normal; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | a, | ||||||
|  | .green { | ||||||
|  |   text-decoration: none; | ||||||
|  |   color: hsla(160, 100%, 37%, 1); | ||||||
|  |   transition: 0.4s; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | @media (hover: hover) { | ||||||
|  |   a:hover { | ||||||
|  |     background-color: hsla(160, 100%, 37%, 0.2); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | @media (min-width: 1024px) { | ||||||
|  |   body { | ||||||
|  |     display: flex; | ||||||
|  |     place-items: center; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   #app { | ||||||
|  |     display: grid; | ||||||
|  |     grid-template-columns: 1fr 1fr; | ||||||
|  |     padding: 0 2rem; | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										26
									
								
								friendslist-with-components/src/components/FriendCard.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								friendslist-with-components/src/components/FriendCard.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,26 @@ | |||||||
|  | <template> | ||||||
|  |   <li> | ||||||
|  |     <h2>{{ friend.name }}</h2> | ||||||
|  |     <button @click="toggleDetails">Show Details</button> | ||||||
|  |     <ul v-if="showDetails"> | ||||||
|  |       <li><strong>Phone:</strong> {{ friend.phone }}</li> | ||||||
|  |       <li><strong>Email:</strong> {{ friend.email }}</li> | ||||||
|  |     </ul> | ||||||
|  |   </li> | ||||||
|  | </template> | ||||||
|  | 
 | ||||||
|  | <script> | ||||||
|  | export default { | ||||||
|  |   data: () => ({ | ||||||
|  |     showDetails: false, | ||||||
|  |   }), | ||||||
|  |   props: ["friend"], | ||||||
|  |   methods: { | ||||||
|  |     toggleDetails() { | ||||||
|  |       this.showDetails = !this.showDetails; | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  |   computed: {}, | ||||||
|  |   watch: {}, | ||||||
|  | }; | ||||||
|  | </script> | ||||||
							
								
								
									
										5
									
								
								friendslist-with-components/src/main.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								friendslist-with-components/src/main.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,5 @@ | |||||||
|  | import { createApp } from "vue"; | ||||||
|  | import App from "./App.vue"; | ||||||
|  | 
 | ||||||
|  | const app = createApp(App); | ||||||
|  | app.mount("#app"); | ||||||
							
								
								
									
										14
									
								
								friendslist-with-components/vite.config.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								friendslist-with-components/vite.config.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,14 @@ | |||||||
|  | import { fileURLToPath, URL } from 'node:url' | ||||||
|  | 
 | ||||||
|  | import { defineConfig } from 'vite' | ||||||
|  | import vue from '@vitejs/plugin-vue' | ||||||
|  | 
 | ||||||
|  | // https://vitejs.dev/config/
 | ||||||
|  | export default defineConfig({ | ||||||
|  |   plugins: [vue()], | ||||||
|  |   resolve: { | ||||||
|  |     alias: { | ||||||
|  |       '@': fileURLToPath(new URL('./src', import.meta.url)) | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | }) | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Marc Gauch
						Marc Gauch