@ -0,0 +1,4 @@ |
|||
> 1% |
|||
last 2 versions |
|||
not dead |
|||
not ie 11 |
@ -0,0 +1,19 @@ |
|||
module.exports = { |
|||
root: true, |
|||
env: { |
|||
node: true, |
|||
}, |
|||
extends: [ |
|||
"plugin:vue/vue3-essential", |
|||
"eslint:recommended", |
|||
"@vue/typescript/recommended", |
|||
"plugin:prettier/recommended", |
|||
], |
|||
parserOptions: { |
|||
ecmaVersion: 2020, |
|||
}, |
|||
rules: { |
|||
"no-console": process.env.NODE_ENV === "production" ? "warn" : "off", |
|||
"no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off", |
|||
}, |
|||
}; |
@ -0,0 +1,23 @@ |
|||
.DS_Store |
|||
node_modules |
|||
/dist |
|||
|
|||
|
|||
# local env files |
|||
.env.local |
|||
.env.*.local |
|||
|
|||
# Log files |
|||
npm-debug.log* |
|||
yarn-debug.log* |
|||
yarn-error.log* |
|||
pnpm-debug.log* |
|||
|
|||
# Editor directories and files |
|||
.idea |
|||
.vscode |
|||
*.suo |
|||
*.ntvs* |
|||
*.njsproj |
|||
*.sln |
|||
*.sw? |
@ -0,0 +1,24 @@ |
|||
# kickstart-for-time-pwa |
|||
|
|||
## Project setup |
|||
``` |
|||
npm install |
|||
``` |
|||
|
|||
### Compiles and hot-reloads for development |
|||
``` |
|||
npm run serve |
|||
``` |
|||
|
|||
### Compiles and minifies for production |
|||
``` |
|||
npm run build |
|||
``` |
|||
|
|||
### Lints and fixes files |
|||
``` |
|||
npm run lint |
|||
``` |
|||
|
|||
### Customize configuration |
|||
See [Configuration Reference](https://cli.vuejs.org/config/). |
@ -0,0 +1,3 @@ |
|||
module.exports = { |
|||
presets: ["@vue/cli-plugin-babel/preset"], |
|||
}; |
@ -0,0 +1,36 @@ |
|||
{ |
|||
"name": "kickstart-for-time-pwa", |
|||
"version": "0.1.0", |
|||
"private": true, |
|||
"scripts": { |
|||
"serve": "vue-cli-service serve", |
|||
"build": "vue-cli-service build", |
|||
"lint": "vue-cli-service lint" |
|||
}, |
|||
"dependencies": { |
|||
"core-js": "^3.8.3", |
|||
"register-service-worker": "^1.7.2", |
|||
"vue": "^3.2.13", |
|||
"vue-class-component": "^8.0.0-0", |
|||
"vue-router": "^4.0.3", |
|||
"vuex": "^4.0.0" |
|||
}, |
|||
"devDependencies": { |
|||
"@typescript-eslint/eslint-plugin": "^5.4.0", |
|||
"@typescript-eslint/parser": "^5.4.0", |
|||
"@vue/cli-plugin-babel": "~5.0.0", |
|||
"@vue/cli-plugin-eslint": "~5.0.0", |
|||
"@vue/cli-plugin-pwa": "~5.0.0", |
|||
"@vue/cli-plugin-router": "~5.0.0", |
|||
"@vue/cli-plugin-typescript": "~5.0.0", |
|||
"@vue/cli-plugin-vuex": "~5.0.0", |
|||
"@vue/cli-service": "~5.0.0", |
|||
"@vue/eslint-config-typescript": "^9.1.0", |
|||
"eslint": "^7.32.0", |
|||
"eslint-config-prettier": "^8.3.0", |
|||
"eslint-plugin-prettier": "^4.0.0", |
|||
"eslint-plugin-vue": "^8.0.3", |
|||
"prettier": "^2.4.1", |
|||
"typescript": "~4.5.5" |
|||
} |
|||
} |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 9.2 KiB |
After Width: | Height: | Size: 29 KiB |
After Width: | Height: | Size: 6.3 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 3.3 KiB |
After Width: | Height: | Size: 4.0 KiB |
After Width: | Height: | Size: 4.6 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 4.6 KiB |
After Width: | Height: | Size: 799 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 215 B |
@ -0,0 +1,17 @@ |
|||
<!DOCTYPE html> |
|||
<html lang=""> |
|||
<head> |
|||
<meta charset="utf-8"> |
|||
<meta http-equiv="X-UA-Compatible" content="IE=edge"> |
|||
<meta name="viewport" content="width=device-width,initial-scale=1.0"> |
|||
<link rel="icon" href="<%= BASE_URL %>favicon.ico"> |
|||
<title><%= htmlWebpackPlugin.options.title %></title> |
|||
</head> |
|||
<body> |
|||
<noscript> |
|||
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong> |
|||
</noscript> |
|||
<div id="app"></div> |
|||
<!-- built files will be auto injected --> |
|||
</body> |
|||
</html> |
@ -0,0 +1,2 @@ |
|||
User-agent: * |
|||
Disallow: |
@ -0,0 +1,30 @@ |
|||
<template> |
|||
<nav> |
|||
<router-link to="/">Home</router-link> | |
|||
<router-link to="/about">About</router-link> |
|||
</nav> |
|||
<router-view /> |
|||
</template> |
|||
|
|||
<style> |
|||
#app { |
|||
font-family: Avenir, Helvetica, Arial, sans-serif; |
|||
-webkit-font-smoothing: antialiased; |
|||
-moz-osx-font-smoothing: grayscale; |
|||
text-align: center; |
|||
color: #2c3e50; |
|||
} |
|||
|
|||
nav { |
|||
padding: 30px; |
|||
} |
|||
|
|||
nav a { |
|||
font-weight: bold; |
|||
color: #2c3e50; |
|||
} |
|||
|
|||
nav a.router-link-exact-active { |
|||
color: #42b983; |
|||
} |
|||
</style> |
After Width: | Height: | Size: 6.7 KiB |
@ -0,0 +1,150 @@ |
|||
<template> |
|||
<div class="hello"> |
|||
<h1>{{ msg }}</h1> |
|||
<p> |
|||
For a guide and recipes on how to configure / customize this project,<br /> |
|||
check out the |
|||
<a href="https://cli.vuejs.org" target="_blank" rel="noopener" |
|||
>vue-cli documentation</a |
|||
>. |
|||
</p> |
|||
<h3>Installed CLI Plugins</h3> |
|||
<ul> |
|||
<li> |
|||
<a |
|||
href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel" |
|||
target="_blank" |
|||
rel="noopener" |
|||
>babel</a |
|||
> |
|||
</li> |
|||
<li> |
|||
<a |
|||
href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-pwa" |
|||
target="_blank" |
|||
rel="noopener" |
|||
>pwa</a |
|||
> |
|||
</li> |
|||
<li> |
|||
<a |
|||
href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-router" |
|||
target="_blank" |
|||
rel="noopener" |
|||
>router</a |
|||
> |
|||
</li> |
|||
<li> |
|||
<a |
|||
href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-vuex" |
|||
target="_blank" |
|||
rel="noopener" |
|||
>vuex</a |
|||
> |
|||
</li> |
|||
<li> |
|||
<a |
|||
href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-eslint" |
|||
target="_blank" |
|||
rel="noopener" |
|||
>eslint</a |
|||
> |
|||
</li> |
|||
<li> |
|||
<a |
|||
href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-typescript" |
|||
target="_blank" |
|||
rel="noopener" |
|||
>typescript</a |
|||
> |
|||
</li> |
|||
</ul> |
|||
<h3>Essential Links</h3> |
|||
<ul> |
|||
<li> |
|||
<a href="https://vuejs.org" target="_blank" rel="noopener">Core Docs</a> |
|||
</li> |
|||
<li> |
|||
<a href="https://forum.vuejs.org" target="_blank" rel="noopener" |
|||
>Forum</a |
|||
> |
|||
</li> |
|||
<li> |
|||
<a href="https://chat.vuejs.org" target="_blank" rel="noopener" |
|||
>Community Chat</a |
|||
> |
|||
</li> |
|||
<li> |
|||
<a href="https://twitter.com/vuejs" target="_blank" rel="noopener" |
|||
>Twitter</a |
|||
> |
|||
</li> |
|||
<li> |
|||
<a href="https://news.vuejs.org" target="_blank" rel="noopener">News</a> |
|||
</li> |
|||
</ul> |
|||
<h3>Ecosystem</h3> |
|||
<ul> |
|||
<li> |
|||
<a href="https://router.vuejs.org" target="_blank" rel="noopener" |
|||
>vue-router</a |
|||
> |
|||
</li> |
|||
<li> |
|||
<a href="https://vuex.vuejs.org" target="_blank" rel="noopener">vuex</a> |
|||
</li> |
|||
<li> |
|||
<a |
|||
href="https://github.com/vuejs/vue-devtools#vue-devtools" |
|||
target="_blank" |
|||
rel="noopener" |
|||
>vue-devtools</a |
|||
> |
|||
</li> |
|||
<li> |
|||
<a href="https://vue-loader.vuejs.org" target="_blank" rel="noopener" |
|||
>vue-loader</a |
|||
> |
|||
</li> |
|||
<li> |
|||
<a |
|||
href="https://github.com/vuejs/awesome-vue" |
|||
target="_blank" |
|||
rel="noopener" |
|||
>awesome-vue</a |
|||
> |
|||
</li> |
|||
</ul> |
|||
</div> |
|||
</template> |
|||
|
|||
<script lang="ts"> |
|||
import { Options, Vue } from "vue-class-component"; |
|||
|
|||
@Options({ |
|||
props: { |
|||
msg: String, |
|||
}, |
|||
}) |
|||
export default class HelloWorld extends Vue { |
|||
msg!: string; |
|||
} |
|||
</script> |
|||
|
|||
<!-- Add "scoped" attribute to limit CSS to this component only --> |
|||
<style scoped> |
|||
h3 { |
|||
margin: 40px 0 0; |
|||
} |
|||
ul { |
|||
list-style-type: none; |
|||
padding: 0; |
|||
} |
|||
li { |
|||
display: inline-block; |
|||
margin: 0 10px; |
|||
} |
|||
a { |
|||
color: #42b983; |
|||
} |
|||
</style> |
@ -0,0 +1,7 @@ |
|||
import { createApp } from "vue"; |
|||
import App from "./App.vue"; |
|||
import "./registerServiceWorker"; |
|||
import router from "./router"; |
|||
import store from "./store"; |
|||
|
|||
createApp(App).use(store).use(router).mount("#app"); |
@ -0,0 +1,34 @@ |
|||
/* eslint-disable no-console */ |
|||
|
|||
import { register } from "register-service-worker"; |
|||
|
|||
if (process.env.NODE_ENV === "production") { |
|||
register(`${process.env.BASE_URL}service-worker.js`, { |
|||
ready() { |
|||
console.log( |
|||
"App is being served from cache by a service worker.\n" + |
|||
"For more details, visit https://goo.gl/AFskqB" |
|||
); |
|||
}, |
|||
registered() { |
|||
console.log("Service worker has been registered."); |
|||
}, |
|||
cached() { |
|||
console.log("Content has been cached for offline use."); |
|||
}, |
|||
updatefound() { |
|||
console.log("New content is downloading."); |
|||
}, |
|||
updated() { |
|||
console.log("New content is available; please refresh."); |
|||
}, |
|||
offline() { |
|||
console.log( |
|||
"No internet connection found. App is running in offline mode." |
|||
); |
|||
}, |
|||
error(error) { |
|||
console.error("Error during service worker registration:", error); |
|||
}, |
|||
}); |
|||
} |
@ -0,0 +1,26 @@ |
|||
import { createRouter, createWebHistory, RouteRecordRaw } from "vue-router"; |
|||
import HomeView from "../views/HomeView.vue"; |
|||
|
|||
const routes: Array<RouteRecordRaw> = [ |
|||
{ |
|||
path: "/", |
|||
name: "home", |
|||
component: HomeView, |
|||
}, |
|||
{ |
|||
path: "/about", |
|||
name: "about", |
|||
// route level code-splitting
|
|||
// this generates a separate chunk (about.[hash].js) for this route
|
|||
// which is lazy-loaded when the route is visited.
|
|||
component: () => |
|||
import(/* webpackChunkName: "about" */ "../views/AboutView.vue"), |
|||
}, |
|||
]; |
|||
|
|||
const router = createRouter({ |
|||
history: createWebHistory(process.env.BASE_URL), |
|||
routes, |
|||
}); |
|||
|
|||
export default router; |
@ -0,0 +1,6 @@ |
|||
/* eslint-disable */ |
|||
declare module '*.vue' { |
|||
import type { DefineComponent } from 'vue' |
|||
const component: DefineComponent<{}, {}, any> |
|||
export default component |
|||
} |
@ -0,0 +1,9 @@ |
|||
import { createStore } from "vuex"; |
|||
|
|||
export default createStore({ |
|||
state: {}, |
|||
getters: {}, |
|||
mutations: {}, |
|||
actions: {}, |
|||
modules: {}, |
|||
}); |
@ -0,0 +1,5 @@ |
|||
<template> |
|||
<div class="about"> |
|||
<h1>This is an about page</h1> |
|||
</div> |
|||
</template> |
@ -0,0 +1,18 @@ |
|||
<template> |
|||
<div class="home"> |
|||
<img alt="Vue logo" src="../assets/logo.png" /> |
|||
<HelloWorld msg="Welcome to Your Vue.js + TypeScript App" /> |
|||
</div> |
|||
</template> |
|||
|
|||
<script lang="ts"> |
|||
import { Options, Vue } from "vue-class-component"; |
|||
import HelloWorld from "@/components/HelloWorld.vue"; // @ is an alias to /src |
|||
|
|||
@Options({ |
|||
components: { |
|||
HelloWorld, |
|||
}, |
|||
}) |
|||
export default class HomeView extends Vue {} |
|||
</script> |
@ -0,0 +1,41 @@ |
|||
{ |
|||
"compilerOptions": { |
|||
"target": "esnext", |
|||
"module": "esnext", |
|||
"strict": true, |
|||
"jsx": "preserve", |
|||
"moduleResolution": "node", |
|||
"experimentalDecorators": true, |
|||
"skipLibCheck": true, |
|||
"esModuleInterop": true, |
|||
"allowSyntheticDefaultImports": true, |
|||
"forceConsistentCasingInFileNames": true, |
|||
"useDefineForClassFields": true, |
|||
"sourceMap": true, |
|||
"baseUrl": ".", |
|||
"types": [ |
|||
"webpack-env" |
|||
], |
|||
"paths": { |
|||
"@/*": [ |
|||
"src/*" |
|||
] |
|||
}, |
|||
"lib": [ |
|||
"esnext", |
|||
"dom", |
|||
"dom.iterable", |
|||
"scripthost" |
|||
] |
|||
}, |
|||
"include": [ |
|||
"src/**/*.ts", |
|||
"src/**/*.tsx", |
|||
"src/**/*.vue", |
|||
"tests/**/*.ts", |
|||
"tests/**/*.tsx" |
|||
], |
|||
"exclude": [ |
|||
"node_modules" |
|||
] |
|||
} |
@ -0,0 +1,4 @@ |
|||
const { defineConfig } = require("@vue/cli-service"); |
|||
module.exports = defineConfig({ |
|||
transpileDependencies: true, |
|||
}); |