├── .dockerignore ├── .editorconfig ├── .eslintrc ├── .github ├── FUNDING.yml └── workflows │ └── ci.yml ├── .gitignore ├── .npmrc ├── .vscode ├── extensions.json └── settings.json ├── Dockerfile ├── LICENSE ├── README.md ├── README.zh-CN.md ├── cypress.config.ts ├── cypress ├── e2e │ └── basic.spec.ts └── tsconfig.json ├── index.html ├── locales ├── README.md ├── ar.yml ├── de.yml ├── en.yml ├── es.yml ├── fr.yml ├── id.yml ├── it.yml ├── ja.yml ├── ko.yml ├── pl.yml ├── pt-BR.yml ├── ru.yml ├── tr.yml ├── vi.yml └── zh-CN.yml ├── netlify.toml ├── package.json ├── pnpm-lock.yaml ├── public ├── _headers ├── favicon-dark.svg ├── favicon.svg ├── pwa-192x192.png ├── pwa-512x512.png └── safari-pinned-tab.svg ├── src ├── App.vue ├── auto-imports.d.ts ├── components.d.ts ├── components │ ├── Counter.vue │ ├── Footer.vue │ └── README.md ├── composables │ └── dark.ts ├── layouts │ ├── 404.vue │ ├── README.md │ ├── default.vue │ └── home.vue ├── main.ts ├── modules │ ├── README.md │ ├── i18n.ts │ ├── nprogress.ts │ ├── pinia.ts │ └── pwa.ts ├── pages │ ├── README.md │ ├── [...all].vue │ ├── about.md │ ├── hi │ │ ├── [name].vue │ │ └── static.vue │ ├── index.vue │ └── welcome.md ├── shims.d.ts ├── store │ └── user.ts ├── styles │ ├── main.css │ └── markdown.css └── types.ts ├── test ├── __snapshots__ │ └── component.test.ts.snap ├── basic.test.ts └── component.test.ts ├── tsconfig.json ├── typed-router.d.ts ├── unocss.config.ts └── vite.config.ts /.dockerignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@antfu" 3 | } 4 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: antfu 2 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | 8 | pull_request: 9 | branches: 10 | - main 11 | 12 | jobs: 13 | lint: 14 | runs-on: ubuntu-latest 15 | steps: 16 | - uses: actions/checkout@v3 17 | - uses: pnpm/action-setup@v2 18 | - uses: actions/setup-node@v3 19 | with: 20 | node-version: 16.x 21 | cache: pnpm 22 | 23 | - name: Install 24 | run: pnpm install 25 | 26 | - name: Lint 27 | run: pnpm run lint 28 | 29 | typecheck: 30 | runs-on: ubuntu-latest 31 | steps: 32 | - uses: actions/checkout@v3 33 | - uses: pnpm/action-setup@v2 34 | - uses: actions/setup-node@v3 35 | with: 36 | node-version: 16.x 37 | cache: pnpm 38 | 39 | - name: Install 40 | run: pnpm install 41 | 42 | - name: Typecheck 43 | run: pnpm run typecheck 44 | 45 | test: 46 | runs-on: ${{ matrix.os }} 47 | 48 | strategy: 49 | matrix: 50 | node-version: [14.x, 16.x] 51 | os: [ubuntu-latest] 52 | fail-fast: false 53 | 54 | steps: 55 | - uses: actions/checkout@v3 56 | - uses: pnpm/action-setup@v2 57 | - name: Use Node.js ${{ matrix.node-version }} 58 | uses: actions/setup-node@v3 59 | with: 60 | node-version: ${{ matrix.node-version }} 61 | registry-url: https://registry.npmjs.org/ 62 | cache: pnpm 63 | 64 | - run: pnpm install 65 | - run: pnpm run test:unit 66 | 67 | test-e2e: 68 | runs-on: ubuntu-latest 69 | steps: 70 | - uses: actions/checkout@v3 71 | - uses: actions/cache@v3 72 | with: 73 | path: | 74 | ~/.cache 75 | key: cypress-cache-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }} 76 | 77 | - uses: pnpm/action-setup@v2 78 | 79 | - name: Use Node.js ${{ matrix.node-version }} 80 | uses: actions/setup-node@v3 81 | with: 82 | node-version: ${{ matrix.node-version }} 83 | registry-url: https://registry.npmjs.org/ 84 | cache: pnpm 85 | 86 | - run: pnpm install 87 | 88 | - name: Cypress PNPM Patch 89 | run: cp pnpm-lock.yaml package-lock.json 90 | 91 | - name: Cypress 92 | uses: cypress-io/github-action@v4 93 | with: 94 | install-command: echo 95 | build: pnpm run build 96 | start: npx vite --port 3333 97 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .vite-ssg-dist 3 | .vite-ssg-temp 4 | *.local 5 | dist 6 | dist-ssr 7 | node_modules 8 | .idea/ 9 | *.log 10 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | shamefully-hoist=true 2 | strict-peer-dependencies=false 3 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "antfu.iconify", 4 | "antfu.unocss", 5 | "antfu.vite", 6 | "antfu.goto-alias", 7 | "csstools.postcss", 8 | "dbaeumer.vscode-eslint", 9 | "vue.volar", 10 | "lokalise.i18n-ally", 11 | "streetsidesoftware.code-spell-checker" 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "cSpell.words": [ 3 | "Vitesse", 4 | "Vite", 5 | "unocss", 6 | "vitest", 7 | "vueuse", 8 | "pinia", 9 | "demi", 10 | "antfu", 11 | "iconify", 12 | "intlify", 13 | "vitejs", 14 | "unplugin", 15 | "pnpm" 16 | ], 17 | "i18n-ally.sourceLanguage": "en", 18 | "i18n-ally.keystyle": "nested", 19 | "i18n-ally.localesPaths": "locales", 20 | "i18n-ally.sortKeys": true, 21 | "prettier.enable": false, 22 | "editor.codeActionsOnSave": { 23 | "source.fixAll.eslint": true 24 | }, 25 | "files.associations": { 26 | "*.css": "postcss" 27 | }, 28 | "editor.formatOnSave": false, 29 | "typescript.preferences.autoImportFileExcludePatterns": ["vue-router"] 30 | } 31 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:16-alpine as build-stage 2 | 3 | WORKDIR /app 4 | RUN corepack enable 5 | 6 | COPY .npmrc package.json pnpm-lock.yaml ./ 7 | RUN --mount=type=cache,id=pnpm-store,target=/root/.pnpm-store \ 8 | pnpm install --frozen-lockfile 9 | 10 | COPY . . 11 | RUN pnpm build 12 | 13 | FROM nginx:stable-alpine as production-stage 14 | 15 | COPY --from=build-stage /app/dist /usr/share/nginx/html 16 | EXPOSE 80 17 | 18 | CMD ["nginx", "-g", "daemon off;"] 19 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020-2021 Anthony Fu 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 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 |
3 |
6 | Mocking up web app with Vitesse(speed)
7 |
12 | Live Demo 13 |
14 | 15 |18 | English | 简体中文 19 | 20 |
21 | 22 |