24 changed files with 7561 additions and 0 deletions
@ -0,0 +1,12 @@ |
|||||||
|
/* eslint-env node */ |
||||||
|
require("@rushstack/eslint-patch/modern-module-resolution"); |
||||||
|
|
||||||
|
module.exports = { |
||||||
|
root: true, |
||||||
|
extends: [ |
||||||
|
"plugin:vue/vue3-essential", |
||||||
|
"eslint:recommended", |
||||||
|
"@vue/eslint-config-typescript/recommended", |
||||||
|
"@vue/eslint-config-prettier", |
||||||
|
], |
||||||
|
}; |
||||||
@ -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? |
||||||
@ -0,0 +1,46 @@ |
|||||||
|
# Nicolas Marsal's CV |
||||||
|
|
||||||
|
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). |
||||||
|
|
||||||
|
## Type Support for `.vue` Imports in TS |
||||||
|
|
||||||
|
TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin) to make the TypeScript language service aware of `.vue` types. |
||||||
|
|
||||||
|
If the standalone TypeScript plugin doesn't feel fast enough to you, Volar has also implemented a [Take Over Mode](https://github.com/johnsoncodehk/volar/discussions/471#discussioncomment-1361669) that is more performant. You can enable it by the following steps: |
||||||
|
|
||||||
|
1. Disable the built-in TypeScript Extension |
||||||
|
1) Run `Extensions: Show Built-in Extensions` from VSCode's command palette |
||||||
|
2) Find `TypeScript and JavaScript Language Features`, right click and select `Disable (Workspace)` |
||||||
|
2. Reload the VSCode window by running `Developer: Reload Window` from the command palette. |
||||||
|
|
||||||
|
## 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 |
||||||
|
``` |
||||||
|
|
||||||
|
### Type-Check, Compile and Minify for Production |
||||||
|
|
||||||
|
```sh |
||||||
|
npm run build |
||||||
|
``` |
||||||
|
|
||||||
|
### Lint with [ESLint](https://eslint.org/) |
||||||
|
|
||||||
|
```sh |
||||||
|
npm run lint |
||||||
|
``` |
||||||
@ -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>Vite App</title> |
||||||
|
</head> |
||||||
|
<body> |
||||||
|
<div id="app"></div> |
||||||
|
<script type="module" src="/src/main.ts"></script> |
||||||
|
</body> |
||||||
|
</html> |
||||||
@ -0,0 +1,32 @@ |
|||||||
|
{ |
||||||
|
"name": "marsal.cv", |
||||||
|
"version": "0.0.0", |
||||||
|
"scripts": { |
||||||
|
"dev": "vite", |
||||||
|
"build": "run-p type-check build-only", |
||||||
|
"preview": "vite preview --port 4173", |
||||||
|
"build-only": "vite build", |
||||||
|
"type-check": "vue-tsc --noEmit", |
||||||
|
"lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore" |
||||||
|
}, |
||||||
|
"dependencies": { |
||||||
|
"pinia": "^2.0.14", |
||||||
|
"vue": "^3.2.37" |
||||||
|
}, |
||||||
|
"devDependencies": { |
||||||
|
"@rushstack/eslint-patch": "^1.1.0", |
||||||
|
"@types/node": "^16.11.43", |
||||||
|
"@vitejs/plugin-vue": "^2.3.3", |
||||||
|
"@vitejs/plugin-vue-jsx": "^1.3.10", |
||||||
|
"@vue/eslint-config-prettier": "^7.0.0", |
||||||
|
"@vue/eslint-config-typescript": "^11.0.0", |
||||||
|
"@vue/tsconfig": "^0.1.3", |
||||||
|
"eslint": "^8.5.0", |
||||||
|
"eslint-plugin-vue": "^9.0.0", |
||||||
|
"npm-run-all": "^4.1.5", |
||||||
|
"prettier": "^2.5.1", |
||||||
|
"typescript": "~4.7.4", |
||||||
|
"vite": "^2.9.14", |
||||||
|
"vue-tsc": "^0.38.4" |
||||||
|
} |
||||||
|
} |
||||||
|
After Width: | Height: | Size: 4.2 KiB |
@ -0,0 +1,51 @@ |
|||||||
|
<script setup lang="ts"> |
||||||
|
import FirstNameAndLastName from "@/components/informations/FirstNameAndLastName.vue"; |
||||||
|
import MyInformations from "@/components/informations/MyInformations.vue"; |
||||||
|
import MyEducation from "@/components/education/MyEducation.vue"; |
||||||
|
import MyLanguages from "@/components/informations/MyLanguages.vue"; |
||||||
|
import MyHobbies from "@/components/informations/MyHobbies.vue"; |
||||||
|
import MySkills from "@/components/skills/MySkills.vue"; |
||||||
|
import MyExperiences from "@/components/experiences/MyExperiences.vue"; |
||||||
|
</script> |
||||||
|
|
||||||
|
<template> |
||||||
|
<div class="main"> |
||||||
|
<div class="left"> |
||||||
|
<FirstNameAndLastName /> |
||||||
|
<MyInformations /> |
||||||
|
<MyEducation /> |
||||||
|
<MyLanguages /> |
||||||
|
<MyHobbies /> |
||||||
|
</div> |
||||||
|
<div class="right"> |
||||||
|
<MySkills /> |
||||||
|
<MyExperiences /> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<style scoped> |
||||||
|
.main { |
||||||
|
display: flex; |
||||||
|
flex-direction: row; |
||||||
|
width: 1024px; |
||||||
|
height: 100%; |
||||||
|
} |
||||||
|
|
||||||
|
.left { |
||||||
|
margin: 8px; |
||||||
|
flex-grow: 0.3; |
||||||
|
flex-shrink: 0; |
||||||
|
border-right: 1px solid gray; |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
} |
||||||
|
|
||||||
|
.right { |
||||||
|
flex-grow: 0.7; |
||||||
|
flex-shrink: 0; |
||||||
|
margin: 8px; |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
} |
||||||
|
</style> |
||||||
@ -0,0 +1,5 @@ |
|||||||
|
#app { |
||||||
|
display: flex; |
||||||
|
flex-direction: row; |
||||||
|
justify-content: center; |
||||||
|
} |
||||||
@ -0,0 +1,32 @@ |
|||||||
|
<script setup lang="ts"> |
||||||
|
defineProps<{ |
||||||
|
title: string; |
||||||
|
}>(); |
||||||
|
</script> |
||||||
|
|
||||||
|
<template> |
||||||
|
<div class="wrapper"> |
||||||
|
<div class="title"> |
||||||
|
{{ title }} |
||||||
|
</div> |
||||||
|
<div class="body"> |
||||||
|
<slot></slot> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
|
||||||
|
<style scoped> |
||||||
|
.wrapper{ |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
} |
||||||
|
.title { |
||||||
|
font-size: 18px; |
||||||
|
font-weight: bolder; |
||||||
|
font-variant: titling-caps; |
||||||
|
} |
||||||
|
.body { |
||||||
|
flex: 1; |
||||||
|
} |
||||||
|
</style> |
||||||
@ -0,0 +1,15 @@ |
|||||||
|
<template> |
||||||
|
<div> |
||||||
|
My Education |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
export default { |
||||||
|
name: "MyEducation" |
||||||
|
}; |
||||||
|
</script> |
||||||
|
|
||||||
|
<style scoped> |
||||||
|
|
||||||
|
</style> |
||||||
@ -0,0 +1,22 @@ |
|||||||
|
<script setup lang="ts"> |
||||||
|
import RightSection from "@/components/common/RightSection.vue"; |
||||||
|
</script> |
||||||
|
|
||||||
|
<template> |
||||||
|
<RightSection title="Experiences"> |
||||||
|
{{ message }} |
||||||
|
</RightSection> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script lang="ts"> |
||||||
|
export default { |
||||||
|
name: "MyExperiences", |
||||||
|
data: () => { |
||||||
|
return { |
||||||
|
message: "Here are my experiences", |
||||||
|
}; |
||||||
|
}, |
||||||
|
}; |
||||||
|
</script> |
||||||
|
|
||||||
|
<style scoped></style> |
||||||
@ -0,0 +1,18 @@ |
|||||||
|
<template> |
||||||
|
<div> |
||||||
|
{{ firstName }} {{ lastName }} ! |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
export default { |
||||||
|
data() { |
||||||
|
return { |
||||||
|
firstName: "Nicolas", |
||||||
|
lastName: "Marsal", |
||||||
|
}; |
||||||
|
}, |
||||||
|
}; |
||||||
|
</script> |
||||||
|
|
||||||
|
<style scoped></style> |
||||||
@ -0,0 +1,15 @@ |
|||||||
|
<template> |
||||||
|
<div> |
||||||
|
My Hobbies |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
export default { |
||||||
|
name: "MyHobbies" |
||||||
|
}; |
||||||
|
</script> |
||||||
|
|
||||||
|
<style scoped> |
||||||
|
|
||||||
|
</style> |
||||||
@ -0,0 +1,15 @@ |
|||||||
|
<template> |
||||||
|
<div> |
||||||
|
My Informations |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
export default { |
||||||
|
name: "MyInformations" |
||||||
|
}; |
||||||
|
</script> |
||||||
|
|
||||||
|
<style scoped> |
||||||
|
|
||||||
|
</style> |
||||||
@ -0,0 +1,15 @@ |
|||||||
|
<template> |
||||||
|
<div> |
||||||
|
My Languages |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
export default { |
||||||
|
name: "MyLanguages" |
||||||
|
}; |
||||||
|
</script> |
||||||
|
|
||||||
|
<style scoped> |
||||||
|
|
||||||
|
</style> |
||||||
@ -0,0 +1,15 @@ |
|||||||
|
<template> |
||||||
|
<div> |
||||||
|
Words Cloud ! |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script> |
||||||
|
export default { |
||||||
|
name: "WordsCloud" |
||||||
|
}; |
||||||
|
</script> |
||||||
|
|
||||||
|
<style scoped> |
||||||
|
|
||||||
|
</style> |
||||||
@ -0,0 +1,20 @@ |
|||||||
|
<script setup lang="ts"> |
||||||
|
import RightSection from "@/components/common/RightSection.vue"; |
||||||
|
</script> |
||||||
|
|
||||||
|
<template> |
||||||
|
<RightSection title="Skills"> |
||||||
|
Here are my skills |
||||||
|
</RightSection> |
||||||
|
</template> |
||||||
|
|
||||||
|
|
||||||
|
<script lang="ts"> |
||||||
|
export default { |
||||||
|
name: "MySkills" |
||||||
|
}; |
||||||
|
</script> |
||||||
|
|
||||||
|
<style scoped> |
||||||
|
|
||||||
|
</style> |
||||||
@ -0,0 +1,11 @@ |
|||||||
|
import { createApp } from "vue"; |
||||||
|
import { createPinia } from "pinia"; |
||||||
|
import App from "./App.vue"; |
||||||
|
|
||||||
|
import "./assets/main.css"; |
||||||
|
|
||||||
|
const app = createApp(App); |
||||||
|
|
||||||
|
app.use(createPinia()); |
||||||
|
|
||||||
|
app.mount("#app"); |
||||||
@ -0,0 +1,16 @@ |
|||||||
|
import { defineStore } from "pinia"; |
||||||
|
|
||||||
|
export const useCounterStore = defineStore({ |
||||||
|
id: "counter", |
||||||
|
state: () => ({ |
||||||
|
counter: 0, |
||||||
|
}), |
||||||
|
getters: { |
||||||
|
doubleCount: (state) => state.counter * 2, |
||||||
|
}, |
||||||
|
actions: { |
||||||
|
increment() { |
||||||
|
this.counter++; |
||||||
|
}, |
||||||
|
}, |
||||||
|
}); |
||||||
@ -0,0 +1,8 @@ |
|||||||
|
{ |
||||||
|
"extends": "@vue/tsconfig/tsconfig.node.json", |
||||||
|
"include": ["vite.config.*", "vitest.config.*", "cypress.config.*"], |
||||||
|
"compilerOptions": { |
||||||
|
"composite": true, |
||||||
|
"types": ["node"] |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,16 @@ |
|||||||
|
{ |
||||||
|
"extends": "@vue/tsconfig/tsconfig.web.json", |
||||||
|
"include": ["env.d.ts", "src/**/*", "src/**/*.vue"], |
||||||
|
"compilerOptions": { |
||||||
|
"baseUrl": ".", |
||||||
|
"paths": { |
||||||
|
"@/*": ["./src/*"] |
||||||
|
} |
||||||
|
}, |
||||||
|
|
||||||
|
"references": [ |
||||||
|
{ |
||||||
|
"path": "./tsconfig.config.json" |
||||||
|
} |
||||||
|
] |
||||||
|
} |
||||||
@ -0,0 +1,15 @@ |
|||||||
|
import { fileURLToPath, URL } from "url"; |
||||||
|
|
||||||
|
import { defineConfig } from "vite"; |
||||||
|
import vue from "@vitejs/plugin-vue"; |
||||||
|
import vueJsx from "@vitejs/plugin-vue-jsx"; |
||||||
|
|
||||||
|
// https://vitejs.dev/config/
|
||||||
|
export default defineConfig({ |
||||||
|
plugins: [vue(), vueJsx()], |
||||||
|
resolve: { |
||||||
|
alias: { |
||||||
|
"@": fileURLToPath(new URL("./src", import.meta.url)), |
||||||
|
}, |
||||||
|
}, |
||||||
|
}); |
||||||
Loading…
Reference in new issue