Compare commits
	
		
			47 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 3c1207657f | ||
|  | da59484756 | ||
|  | 501ff74200 | ||
|  | adaf70b651 | ||
|  | 3ed0230512 | ||
|  | ac3f63086d | ||
|  | f7a5571259 | ||
|  | a452fe4a81 | ||
|  | 61ef0a0570 | ||
|  | b25d6e98bc | ||
|  | ae4e44e588 | ||
|  | ae904df91e | ||
|  | e9f0988b4d | ||
|  | f3f41914c3 | ||
|  | 0bf8393588 | ||
|  | 39820a3f06 | ||
|  | 083c719361 | ||
|  | b34da44baf | ||
|  | e2c094d1d3 | ||
|  | 339866483a | ||
|  | fa24ca77a4 | ||
|  | 8bceb3ef50 | ||
|  | 108f55bbe8 | ||
|  | 87419670fd | ||
|  | cdb1849476 | ||
|  | 55ffba3288 | ||
|  | 8ddaee3bf8 | ||
|  | af2c3273cf | ||
|  | 12e57fce54 | ||
|  | b08b769a8a | ||
|  | 65cef9437a | ||
|  | f1b9dc396b | ||
|  | b8fe7fe4e7 | ||
|  | 001de3b060 | ||
|  | 761a0ce4ee | ||
|  | a9d330cac3 | ||
|  | 540786d482 | ||
|  | b876b7b1d9 | ||
|  | d463449db4 | ||
|  | 37d30e9e7d | ||
|  | 58b8383d4c | ||
|  | 35a5d3ef9d | ||
|  | f618005402 | ||
|  | a9b6d5f9ee | ||
|  | e6a4d6db8b | ||
|  | ed0f5b1d76 | ||
|  | 65222e2e3a | 
							
								
								
									
										22
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | |||||||
|  | name: Release | ||||||
|  |  | ||||||
|  | on: | ||||||
|  |   push: | ||||||
|  |     tags: | ||||||
|  |       - 'v*' | ||||||
|  |  | ||||||
|  | jobs: | ||||||
|  |   release: | ||||||
|  |     runs-on: ubuntu-latest | ||||||
|  |     steps: | ||||||
|  |       - uses: actions/checkout@v3 | ||||||
|  |         with: | ||||||
|  |           fetch-depth: 0 | ||||||
|  |  | ||||||
|  |       - uses: actions/setup-node@v3 | ||||||
|  |         with: | ||||||
|  |           node-version: 16.x | ||||||
|  |  | ||||||
|  |       - run: npx changelogithub | ||||||
|  |         env: | ||||||
|  |           GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} | ||||||
							
								
								
									
										12
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								README.md
									
									
									
									
									
								
							| @@ -4,7 +4,7 @@ | |||||||
|  |  | ||||||
| - Single quotes, no semi | - Single quotes, no semi | ||||||
| - Auto fix for formatting (aimed to be used standalone without Prettier) | - Auto fix for formatting (aimed to be used standalone without Prettier) | ||||||
| - TypeScript, Vue, React out-of-box | - Designed to work with TypeScript, Vue out-of-box | ||||||
| - Lint also for json, yaml, markdown | - Lint also for json, yaml, markdown | ||||||
| - Sorted imports, dangling commas for cleaner commit diff | - Sorted imports, dangling commas for cleaner commit diff | ||||||
| - Reasonable defaults, best practices, only one-line of config | - Reasonable defaults, best practices, only one-line of config | ||||||
| @@ -42,25 +42,29 @@ For example: | |||||||
|  |  | ||||||
| ### Config VS Code auto fix | ### Config VS Code auto fix | ||||||
|  |  | ||||||
| Create `.vscode/settings.json` | Install [VS Code ESLint extension](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint) and create `.vscode/settings.json` | ||||||
|  |  | ||||||
| ```json | ```json | ||||||
| { | { | ||||||
|   "prettier.enable": false, |   "prettier.enable": false, | ||||||
|  |   "editor.formatOnSave": false, | ||||||
|   "editor.codeActionsOnSave": { |   "editor.codeActionsOnSave": { | ||||||
|     "source.fixAll.eslint": true |     "source.fixAll.eslint": true | ||||||
|   } |   } | ||||||
| } | } | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
|  | ## Extended Reading | ||||||
|  |  | ||||||
|  | Learn more about the context - [Why I don't use Prettier](https://antfu.me/posts/why-not-prettier). | ||||||
|  |  | ||||||
| ## Check Also | ## Check Also | ||||||
|  |  | ||||||
| - [antfu/dotfiles](https://github.com/antfu/dotfiles) - My dotfiles | - [antfu/dotfiles](https://github.com/antfu/dotfiles) - My dotfiles | ||||||
| - [antfu/vscode-settings](https://github.com/antfu/vscode-settings) - My VS Code settings | - [antfu/vscode-settings](https://github.com/antfu/vscode-settings) - My VS Code settings | ||||||
| - [antfu/eslint-config](https://github.com/antfu/eslint-config) - My ESLint config |  | ||||||
| - [antfu/ts-starter](https://github.com/antfu/ts-starter) - My starter template for TypeScript library | - [antfu/ts-starter](https://github.com/antfu/ts-starter) - My starter template for TypeScript library | ||||||
| - [antfu/vitesse](https://github.com/antfu/vitesse) - My starter template for Vue & Vite app | - [antfu/vitesse](https://github.com/antfu/vitesse) - My starter template for Vue & Vite app | ||||||
|  |  | ||||||
| ## License | ## License | ||||||
|  |  | ||||||
| MIT | [MIT](./LICENSE) License © 2019-PRESENT [Anthony Fu](https://github.com/antfu) | ||||||
|   | |||||||
| @@ -1,6 +0,0 @@ | |||||||
| // @ts-expect-error requires a comment |  | ||||||
| export const a: string = 1 |  | ||||||
|  |  | ||||||
| export interface Foo { |  | ||||||
|   a: string |  | ||||||
| } |  | ||||||
							
								
								
									
										9
									
								
								fixtures/vitesse/.editorconfig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								fixtures/vitesse/.editorconfig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | |||||||
|  | root = true | ||||||
|  |  | ||||||
|  | [*] | ||||||
|  | charset = utf-8 | ||||||
|  | indent_style = space | ||||||
|  | indent_size = 2 | ||||||
|  | end_of_line = lf | ||||||
|  | insert_final_newline = true | ||||||
|  | trim_trailing_whitespace = true | ||||||
							
								
								
									
										9
									
								
								fixtures/vitesse/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								fixtures/vitesse/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | |||||||
|  | .DS_Store | ||||||
|  | .vite-ssg-dist | ||||||
|  | .vite-ssg-temp | ||||||
|  | *.local | ||||||
|  | dist | ||||||
|  | dist-ssr | ||||||
|  | node_modules | ||||||
|  | .idea/ | ||||||
|  | *.log | ||||||
							
								
								
									
										21
									
								
								fixtures/vitesse/LICENSE
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								fixtures/vitesse/LICENSE
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | |||||||
|  | MIT License | ||||||
|  |  | ||||||
|  | Copyright (c) 2020-2021 Anthony Fu | ||||||
|  |  | ||||||
|  | Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
|  | of this software and associated documentation files (the "Software"), to deal | ||||||
|  | in the Software without restriction, including without limitation the rights | ||||||
|  | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||||
|  | copies of the Software, and to permit persons to whom the Software is | ||||||
|  | furnished to do so, subject to the following conditions: | ||||||
|  |  | ||||||
|  | The above copyright notice and this permission notice shall be included in all | ||||||
|  | copies or substantial portions of the Software. | ||||||
|  |  | ||||||
|  | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||||
|  | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||||
|  | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||||
|  | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||||
|  | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||||
|  | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||||||
|  | SOFTWARE. | ||||||
							
								
								
									
										1
									
								
								fixtures/vitesse/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								fixtures/vitesse/README.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | |||||||
|  | This is a fixture cloned from https://github.com/antfu/vitesse. It's only for lint checking and does not run. | ||||||
							
								
								
									
										10
									
								
								fixtures/vitesse/cypress.config.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								fixtures/vitesse/cypress.config.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | |||||||
|  | import { defineConfig } from 'cypress' | ||||||
|  |  | ||||||
|  | export default defineConfig({ | ||||||
|  |   e2e: { | ||||||
|  |     baseUrl: 'http://localhost:3333', | ||||||
|  |     chromeWebSecurity: false, | ||||||
|  |     specPattern: 'cypress/e2e/**/*.spec.*', | ||||||
|  |     supportFile: false, | ||||||
|  |   }, | ||||||
|  | }) | ||||||
							
								
								
									
										36
									
								
								fixtures/vitesse/cypress/e2e/basic.spec.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								fixtures/vitesse/cypress/e2e/basic.spec.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,36 @@ | |||||||
|  | context('Basic', () => { | ||||||
|  |   beforeEach(() => { | ||||||
|  |     cy.visit('/') | ||||||
|  |   }) | ||||||
|  |  | ||||||
|  |   it('basic nav', () => { | ||||||
|  |     cy.url() | ||||||
|  |       .should('eq', 'http://localhost:3333/') | ||||||
|  |  | ||||||
|  |     cy.contains('[Home Layout]') | ||||||
|  |       .should('exist') | ||||||
|  |  | ||||||
|  |     cy.get('#input') | ||||||
|  |       .type('Vitesse{Enter}') | ||||||
|  |       .url() | ||||||
|  |       .should('eq', 'http://localhost:3333/hi/Vitesse') | ||||||
|  |  | ||||||
|  |     cy.contains('[Default Layout]') | ||||||
|  |       .should('exist') | ||||||
|  |  | ||||||
|  |     cy.get('[btn]') | ||||||
|  |       .click() | ||||||
|  |       .url() | ||||||
|  |       .should('eq', 'http://localhost:3333/') | ||||||
|  |   }) | ||||||
|  |  | ||||||
|  |   it('markdown', () => { | ||||||
|  |     cy.get('[title="About"]') | ||||||
|  |       .click() | ||||||
|  |       .url() | ||||||
|  |       .should('eq', 'http://localhost:3333/about') | ||||||
|  |  | ||||||
|  |     cy.get('.shiki') | ||||||
|  |       .should('exist') | ||||||
|  |   }) | ||||||
|  | }) | ||||||
							
								
								
									
										22
									
								
								fixtures/vitesse/index.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								fixtures/vitesse/index.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | |||||||
|  | <!DOCTYPE html> | ||||||
|  | <html lang="en"> | ||||||
|  | <head> | ||||||
|  |   <meta charset="UTF-8"> | ||||||
|  |   <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||||||
|  |   <link rel="apple-touch-icon" href="/pwa-192x192.png"> | ||||||
|  |   <link rel="mask-icon" href="/safari-pinned-tab.svg" color="#00aba9"> | ||||||
|  |   <meta name="msapplication-TileColor" content="#00aba9"> | ||||||
|  |   <script> | ||||||
|  |     (function () { | ||||||
|  |       const prefersDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches | ||||||
|  |       const setting = localStorage.getItem('vueuse-color-scheme') || 'auto' | ||||||
|  |       if (setting === 'dark' || (prefersDark && setting !== 'light')) | ||||||
|  |         document.documentElement.classList.toggle('dark', true) | ||||||
|  |     })() | ||||||
|  |   </script> | ||||||
|  | </head> | ||||||
|  | <body class="font-sans"> | ||||||
|  |   <div id="app"></div> | ||||||
|  |   <script type="module" src="/src/main.ts"></script> | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
							
								
								
									
										62
									
								
								fixtures/vitesse/package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								fixtures/vitesse/package.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,62 @@ | |||||||
|  | { | ||||||
|  |   "type": "module", | ||||||
|  |   "private": true, | ||||||
|  |   "packageManager": "pnpm@7.8.0", | ||||||
|  |   "scripts": { | ||||||
|  |     "build": "vite-ssg build", | ||||||
|  |     "dev": "vite --port 3333 --open", | ||||||
|  |     "lint": "eslint .", | ||||||
|  |     "preview": "vite preview", | ||||||
|  |     "preview-https": "serve dist", | ||||||
|  |     "test": "vitest", | ||||||
|  |     "test:e2e": "cypress open", | ||||||
|  |     "test:unit": "vitest", | ||||||
|  |     "typecheck": "vue-tsc --noEmit", | ||||||
|  |     "up": "taze major -I" | ||||||
|  |   }, | ||||||
|  |   "dependencies": { | ||||||
|  |     "@unocss/reset": "^0.45.8", | ||||||
|  |     "@vueuse/core": "^9.1.0", | ||||||
|  |     "@vueuse/head": "^0.7.9", | ||||||
|  |     "nprogress": "^0.2.0", | ||||||
|  |     "pinia": "^2.0.17", | ||||||
|  |     "vue": "^3.2.37", | ||||||
|  |     "vue-demi": "^0.13.6", | ||||||
|  |     "vue-i18n": "^9.2.2", | ||||||
|  |     "vue-router": "^4.1.3" | ||||||
|  |   }, | ||||||
|  |   "devDependencies": { | ||||||
|  |     "@antfu/eslint-config": "^0.25.2", | ||||||
|  |     "@iconify-json/carbon": "^1.1.7", | ||||||
|  |     "@intlify/vite-plugin-vue-i18n": "^6.0.0", | ||||||
|  |     "@types/markdown-it-link-attributes": "^3.0.1", | ||||||
|  |     "@types/nprogress": "^0.2.0", | ||||||
|  |     "@vitejs/plugin-vue": "^3.0.1", | ||||||
|  |     "@vue/test-utils": "^2.0.2", | ||||||
|  |     "critters": "^0.0.16", | ||||||
|  |     "cross-env": "^7.0.3", | ||||||
|  |     "cypress": "^10.4.0", | ||||||
|  |     "eslint": "^8.21.0", | ||||||
|  |     "eslint-plugin-cypress": "^2.12.1", | ||||||
|  |     "https-localhost": "^4.7.1", | ||||||
|  |     "markdown-it-link-attributes": "^4.0.0", | ||||||
|  |     "markdown-it-shiki": "^0.5.1", | ||||||
|  |     "pnpm": "^7.8.0", | ||||||
|  |     "shiki": "^0.10.1", | ||||||
|  |     "taze": "^0.7.6", | ||||||
|  |     "typescript": "^4.7.4", | ||||||
|  |     "unocss": "^0.45.5", | ||||||
|  |     "unplugin-auto-import": "^0.11.0", | ||||||
|  |     "unplugin-vue-components": "^0.22.0", | ||||||
|  |     "vite": "^3.0.4", | ||||||
|  |     "vite-plugin-inspect": "^0.6.0", | ||||||
|  |     "vite-plugin-pages": "^0.25.0", | ||||||
|  |     "vite-plugin-pwa": "^0.12.3", | ||||||
|  |     "vite-plugin-vue-layouts": "^0.7.0", | ||||||
|  |     "vite-plugin-vue-markdown": "^0.21.1", | ||||||
|  |     "vite-ssg": "^0.20.2", | ||||||
|  |     "vite-ssg-sitemap": "^0.3.1", | ||||||
|  |     "vitest": "^0.21.0", | ||||||
|  |     "vue-tsc": "^0.39.5" | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										26
									
								
								fixtures/vitesse/src/App.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								fixtures/vitesse/src/App.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | |||||||
|  | <script setup lang="ts"> | ||||||
|  | // https://github.com/vueuse/head | ||||||
|  | // you can use this to manipulate the document head in any components, | ||||||
|  | // they will be rendered correctly in the html results with vite-ssg | ||||||
|  | useHead({ | ||||||
|  |   title: 'Vitesse', | ||||||
|  |   meta: [ | ||||||
|  |     { name: 'description', content: 'Opinionated Vite Starter Template' }, | ||||||
|  |     { | ||||||
|  |       name: 'theme-color', | ||||||
|  |       content: computed(() => isDark.value ? '#00aba9' : '#ffffff'), | ||||||
|  |     }, | ||||||
|  |   ], | ||||||
|  |   link: [ | ||||||
|  |     { | ||||||
|  |       rel: 'icon', | ||||||
|  |       type: 'image/svg+xml', | ||||||
|  |       href: computed(() => preferredDark.value ? '/favicon-dark.svg' : '/favicon.svg'), | ||||||
|  |     }, | ||||||
|  |   ], | ||||||
|  | }) | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <template> | ||||||
|  |   <RouterView /> | ||||||
|  | </template> | ||||||
							
								
								
									
										546
									
								
								fixtures/vitesse/src/auto-imports.d.ts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										546
									
								
								fixtures/vitesse/src/auto-imports.d.ts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,546 @@ | |||||||
|  | // Generated by 'unplugin-auto-import' | ||||||
|  | export {} | ||||||
|  | declare global { | ||||||
|  |   const $$: typeof import('vue/macros')['$$'] | ||||||
|  |   const $: typeof import('vue/macros')['$'] | ||||||
|  |   const $computed: typeof import('vue/macros')['$computed'] | ||||||
|  |   const $customRef: typeof import('vue/macros')['$customRef'] | ||||||
|  |   const $ref: typeof import('vue/macros')['$ref'] | ||||||
|  |   const $shallowRef: typeof import('vue/macros')['$shallowRef'] | ||||||
|  |   const $toRef: typeof import('vue/macros')['$toRef'] | ||||||
|  |   const EffectScope: typeof import('vue')['EffectScope'] | ||||||
|  |   const asyncComputed: typeof import('@vueuse/core')['asyncComputed'] | ||||||
|  |   const autoResetRef: typeof import('@vueuse/core')['autoResetRef'] | ||||||
|  |   const computed: typeof import('vue')['computed'] | ||||||
|  |   const computedAsync: typeof import('@vueuse/core')['computedAsync'] | ||||||
|  |   const computedEager: typeof import('@vueuse/core')['computedEager'] | ||||||
|  |   const computedInject: typeof import('@vueuse/core')['computedInject'] | ||||||
|  |   const computedWithControl: typeof import('@vueuse/core')['computedWithControl'] | ||||||
|  |   const controlledComputed: typeof import('@vueuse/core')['controlledComputed'] | ||||||
|  |   const controlledRef: typeof import('@vueuse/core')['controlledRef'] | ||||||
|  |   const createApp: typeof import('vue')['createApp'] | ||||||
|  |   const createEventHook: typeof import('@vueuse/core')['createEventHook'] | ||||||
|  |   const createGlobalState: typeof import('@vueuse/core')['createGlobalState'] | ||||||
|  |   const createInjectionState: typeof import('@vueuse/core')['createInjectionState'] | ||||||
|  |   const createReactiveFn: typeof import('@vueuse/core')['createReactiveFn'] | ||||||
|  |   const createSharedComposable: typeof import('@vueuse/core')['createSharedComposable'] | ||||||
|  |   const createUnrefFn: typeof import('@vueuse/core')['createUnrefFn'] | ||||||
|  |   const customRef: typeof import('vue')['customRef'] | ||||||
|  |   const debouncedRef: typeof import('@vueuse/core')['debouncedRef'] | ||||||
|  |   const debouncedWatch: typeof import('@vueuse/core')['debouncedWatch'] | ||||||
|  |   const defineAsyncComponent: typeof import('vue')['defineAsyncComponent'] | ||||||
|  |   const defineComponent: typeof import('vue')['defineComponent'] | ||||||
|  |   const eagerComputed: typeof import('@vueuse/core')['eagerComputed'] | ||||||
|  |   const effectScope: typeof import('vue')['effectScope'] | ||||||
|  |   const extendRef: typeof import('@vueuse/core')['extendRef'] | ||||||
|  |   const getCurrentInstance: typeof import('vue')['getCurrentInstance'] | ||||||
|  |   const getCurrentScope: typeof import('vue')['getCurrentScope'] | ||||||
|  |   const h: typeof import('vue')['h'] | ||||||
|  |   const ignorableWatch: typeof import('@vueuse/core')['ignorableWatch'] | ||||||
|  |   const inject: typeof import('vue')['inject'] | ||||||
|  |   const isDark: typeof import('./composables/dark')['isDark'] | ||||||
|  |   const isDefined: typeof import('@vueuse/core')['isDefined'] | ||||||
|  |   const isProxy: typeof import('vue')['isProxy'] | ||||||
|  |   const isReactive: typeof import('vue')['isReactive'] | ||||||
|  |   const isReadonly: typeof import('vue')['isReadonly'] | ||||||
|  |   const isRef: typeof import('vue')['isRef'] | ||||||
|  |   const makeDestructurable: typeof import('@vueuse/core')['makeDestructurable'] | ||||||
|  |   const markRaw: typeof import('vue')['markRaw'] | ||||||
|  |   const nextTick: typeof import('vue')['nextTick'] | ||||||
|  |   const onActivated: typeof import('vue')['onActivated'] | ||||||
|  |   const onBeforeMount: typeof import('vue')['onBeforeMount'] | ||||||
|  |   const onBeforeUnmount: typeof import('vue')['onBeforeUnmount'] | ||||||
|  |   const onBeforeUpdate: typeof import('vue')['onBeforeUpdate'] | ||||||
|  |   const onClickOutside: typeof import('@vueuse/core')['onClickOutside'] | ||||||
|  |   const onDeactivated: typeof import('vue')['onDeactivated'] | ||||||
|  |   const onErrorCaptured: typeof import('vue')['onErrorCaptured'] | ||||||
|  |   const onKeyStroke: typeof import('@vueuse/core')['onKeyStroke'] | ||||||
|  |   const onLongPress: typeof import('@vueuse/core')['onLongPress'] | ||||||
|  |   const onMounted: typeof import('vue')['onMounted'] | ||||||
|  |   const onRenderTracked: typeof import('vue')['onRenderTracked'] | ||||||
|  |   const onRenderTriggered: typeof import('vue')['onRenderTriggered'] | ||||||
|  |   const onScopeDispose: typeof import('vue')['onScopeDispose'] | ||||||
|  |   const onServerPrefetch: typeof import('vue')['onServerPrefetch'] | ||||||
|  |   const onStartTyping: typeof import('@vueuse/core')['onStartTyping'] | ||||||
|  |   const onUnmounted: typeof import('vue')['onUnmounted'] | ||||||
|  |   const onUpdated: typeof import('vue')['onUpdated'] | ||||||
|  |   const pausableWatch: typeof import('@vueuse/core')['pausableWatch'] | ||||||
|  |   const preferredDark: typeof import('./composables/dark')['preferredDark'] | ||||||
|  |   const provide: typeof import('vue')['provide'] | ||||||
|  |   const reactify: typeof import('@vueuse/core')['reactify'] | ||||||
|  |   const reactifyObject: typeof import('@vueuse/core')['reactifyObject'] | ||||||
|  |   const reactive: typeof import('vue')['reactive'] | ||||||
|  |   const reactiveComputed: typeof import('@vueuse/core')['reactiveComputed'] | ||||||
|  |   const reactiveOmit: typeof import('@vueuse/core')['reactiveOmit'] | ||||||
|  |   const reactivePick: typeof import('@vueuse/core')['reactivePick'] | ||||||
|  |   const readonly: typeof import('vue')['readonly'] | ||||||
|  |   const ref: typeof import('vue')['ref'] | ||||||
|  |   const refAutoReset: typeof import('@vueuse/core')['refAutoReset'] | ||||||
|  |   const refDebounced: typeof import('@vueuse/core')['refDebounced'] | ||||||
|  |   const refDefault: typeof import('@vueuse/core')['refDefault'] | ||||||
|  |   const refThrottled: typeof import('@vueuse/core')['refThrottled'] | ||||||
|  |   const refWithControl: typeof import('@vueuse/core')['refWithControl'] | ||||||
|  |   const resolveComponent: typeof import('vue')['resolveComponent'] | ||||||
|  |   const resolveRef: typeof import('@vueuse/core')['resolveRef'] | ||||||
|  |   const resolveUnref: typeof import('@vueuse/core')['resolveUnref'] | ||||||
|  |   const shallowReactive: typeof import('vue')['shallowReactive'] | ||||||
|  |   const shallowReadonly: typeof import('vue')['shallowReadonly'] | ||||||
|  |   const shallowRef: typeof import('vue')['shallowRef'] | ||||||
|  |   const syncRef: typeof import('@vueuse/core')['syncRef'] | ||||||
|  |   const syncRefs: typeof import('@vueuse/core')['syncRefs'] | ||||||
|  |   const templateRef: typeof import('@vueuse/core')['templateRef'] | ||||||
|  |   const throttledRef: typeof import('@vueuse/core')['throttledRef'] | ||||||
|  |   const throttledWatch: typeof import('@vueuse/core')['throttledWatch'] | ||||||
|  |   const toRaw: typeof import('vue')['toRaw'] | ||||||
|  |   const toReactive: typeof import('@vueuse/core')['toReactive'] | ||||||
|  |   const toRef: typeof import('vue')['toRef'] | ||||||
|  |   const toRefs: typeof import('vue')['toRefs'] | ||||||
|  |   const toggleDark: typeof import('./composables/dark')['toggleDark'] | ||||||
|  |   const triggerRef: typeof import('vue')['triggerRef'] | ||||||
|  |   const tryOnBeforeMount: typeof import('@vueuse/core')['tryOnBeforeMount'] | ||||||
|  |   const tryOnBeforeUnmount: typeof import('@vueuse/core')['tryOnBeforeUnmount'] | ||||||
|  |   const tryOnMounted: typeof import('@vueuse/core')['tryOnMounted'] | ||||||
|  |   const tryOnScopeDispose: typeof import('@vueuse/core')['tryOnScopeDispose'] | ||||||
|  |   const tryOnUnmounted: typeof import('@vueuse/core')['tryOnUnmounted'] | ||||||
|  |   const unref: typeof import('vue')['unref'] | ||||||
|  |   const unrefElement: typeof import('@vueuse/core')['unrefElement'] | ||||||
|  |   const until: typeof import('@vueuse/core')['until'] | ||||||
|  |   const useActiveElement: typeof import('@vueuse/core')['useActiveElement'] | ||||||
|  |   const useArrayEvery: typeof import('@vueuse/core')['useArrayEvery'] | ||||||
|  |   const useArrayFilter: typeof import('@vueuse/core')['useArrayFilter'] | ||||||
|  |   const useArrayFind: typeof import('@vueuse/core')['useArrayFind'] | ||||||
|  |   const useArrayFindIndex: typeof import('@vueuse/core')['useArrayFindIndex'] | ||||||
|  |   const useArrayJoin: typeof import('@vueuse/core')['useArrayJoin'] | ||||||
|  |   const useArrayMap: typeof import('@vueuse/core')['useArrayMap'] | ||||||
|  |   const useArrayReduce: typeof import('@vueuse/core')['useArrayReduce'] | ||||||
|  |   const useArraySome: typeof import('@vueuse/core')['useArraySome'] | ||||||
|  |   const useAsyncQueue: typeof import('@vueuse/core')['useAsyncQueue'] | ||||||
|  |   const useAsyncState: typeof import('@vueuse/core')['useAsyncState'] | ||||||
|  |   const useAttrs: typeof import('vue')['useAttrs'] | ||||||
|  |   const useBase64: typeof import('@vueuse/core')['useBase64'] | ||||||
|  |   const useBattery: typeof import('@vueuse/core')['useBattery'] | ||||||
|  |   const useBluetooth: typeof import('@vueuse/core')['useBluetooth'] | ||||||
|  |   const useBreakpoints: typeof import('@vueuse/core')['useBreakpoints'] | ||||||
|  |   const useBroadcastChannel: typeof import('@vueuse/core')['useBroadcastChannel'] | ||||||
|  |   const useBrowserLocation: typeof import('@vueuse/core')['useBrowserLocation'] | ||||||
|  |   const useCached: typeof import('@vueuse/core')['useCached'] | ||||||
|  |   const useClipboard: typeof import('@vueuse/core')['useClipboard'] | ||||||
|  |   const useColorMode: typeof import('@vueuse/core')['useColorMode'] | ||||||
|  |   const useConfirmDialog: typeof import('@vueuse/core')['useConfirmDialog'] | ||||||
|  |   const useCounter: typeof import('@vueuse/core')['useCounter'] | ||||||
|  |   const useCssModule: typeof import('vue')['useCssModule'] | ||||||
|  |   const useCssVar: typeof import('@vueuse/core')['useCssVar'] | ||||||
|  |   const useCssVars: typeof import('vue')['useCssVars'] | ||||||
|  |   const useCurrentElement: typeof import('@vueuse/core')['useCurrentElement'] | ||||||
|  |   const useCycleList: typeof import('@vueuse/core')['useCycleList'] | ||||||
|  |   const useDark: typeof import('@vueuse/core')['useDark'] | ||||||
|  |   const useDateFormat: typeof import('@vueuse/core')['useDateFormat'] | ||||||
|  |   const useDebounce: typeof import('@vueuse/core')['useDebounce'] | ||||||
|  |   const useDebounceFn: typeof import('@vueuse/core')['useDebounceFn'] | ||||||
|  |   const useDebouncedRefHistory: typeof import('@vueuse/core')['useDebouncedRefHistory'] | ||||||
|  |   const useDeviceMotion: typeof import('@vueuse/core')['useDeviceMotion'] | ||||||
|  |   const useDeviceOrientation: typeof import('@vueuse/core')['useDeviceOrientation'] | ||||||
|  |   const useDevicePixelRatio: typeof import('@vueuse/core')['useDevicePixelRatio'] | ||||||
|  |   const useDevicesList: typeof import('@vueuse/core')['useDevicesList'] | ||||||
|  |   const useDisplayMedia: typeof import('@vueuse/core')['useDisplayMedia'] | ||||||
|  |   const useDocumentVisibility: typeof import('@vueuse/core')['useDocumentVisibility'] | ||||||
|  |   const useDraggable: typeof import('@vueuse/core')['useDraggable'] | ||||||
|  |   const useDropZone: typeof import('@vueuse/core')['useDropZone'] | ||||||
|  |   const useElementBounding: typeof import('@vueuse/core')['useElementBounding'] | ||||||
|  |   const useElementByPoint: typeof import('@vueuse/core')['useElementByPoint'] | ||||||
|  |   const useElementHover: typeof import('@vueuse/core')['useElementHover'] | ||||||
|  |   const useElementSize: typeof import('@vueuse/core')['useElementSize'] | ||||||
|  |   const useElementVisibility: typeof import('@vueuse/core')['useElementVisibility'] | ||||||
|  |   const useEventBus: typeof import('@vueuse/core')['useEventBus'] | ||||||
|  |   const useEventListener: typeof import('@vueuse/core')['useEventListener'] | ||||||
|  |   const useEventSource: typeof import('@vueuse/core')['useEventSource'] | ||||||
|  |   const useEyeDropper: typeof import('@vueuse/core')['useEyeDropper'] | ||||||
|  |   const useFavicon: typeof import('@vueuse/core')['useFavicon'] | ||||||
|  |   const useFetch: typeof import('@vueuse/core')['useFetch'] | ||||||
|  |   const useFileDialog: typeof import('@vueuse/core')['useFileDialog'] | ||||||
|  |   const useFileSystemAccess: typeof import('@vueuse/core')['useFileSystemAccess'] | ||||||
|  |   const useFocus: typeof import('@vueuse/core')['useFocus'] | ||||||
|  |   const useFocusWithin: typeof import('@vueuse/core')['useFocusWithin'] | ||||||
|  |   const useFps: typeof import('@vueuse/core')['useFps'] | ||||||
|  |   const useFullscreen: typeof import('@vueuse/core')['useFullscreen'] | ||||||
|  |   const useGamepad: typeof import('@vueuse/core')['useGamepad'] | ||||||
|  |   const useGeolocation: typeof import('@vueuse/core')['useGeolocation'] | ||||||
|  |   const useHead: typeof import('@vueuse/head')['useHead'] | ||||||
|  |   const useI18n: typeof import('vue-i18n')['useI18n'] | ||||||
|  |   const useIdle: typeof import('@vueuse/core')['useIdle'] | ||||||
|  |   const useImage: typeof import('@vueuse/core')['useImage'] | ||||||
|  |   const useInfiniteScroll: typeof import('@vueuse/core')['useInfiniteScroll'] | ||||||
|  |   const useIntersectionObserver: typeof import('@vueuse/core')['useIntersectionObserver'] | ||||||
|  |   const useInterval: typeof import('@vueuse/core')['useInterval'] | ||||||
|  |   const useIntervalFn: typeof import('@vueuse/core')['useIntervalFn'] | ||||||
|  |   const useKeyModifier: typeof import('@vueuse/core')['useKeyModifier'] | ||||||
|  |   const useLastChanged: typeof import('@vueuse/core')['useLastChanged'] | ||||||
|  |   const useLocalStorage: typeof import('@vueuse/core')['useLocalStorage'] | ||||||
|  |   const useMagicKeys: typeof import('@vueuse/core')['useMagicKeys'] | ||||||
|  |   const useManualRefHistory: typeof import('@vueuse/core')['useManualRefHistory'] | ||||||
|  |   const useMediaControls: typeof import('@vueuse/core')['useMediaControls'] | ||||||
|  |   const useMediaQuery: typeof import('@vueuse/core')['useMediaQuery'] | ||||||
|  |   const useMemoize: typeof import('@vueuse/core')['useMemoize'] | ||||||
|  |   const useMemory: typeof import('@vueuse/core')['useMemory'] | ||||||
|  |   const useMounted: typeof import('@vueuse/core')['useMounted'] | ||||||
|  |   const useMouse: typeof import('@vueuse/core')['useMouse'] | ||||||
|  |   const useMouseInElement: typeof import('@vueuse/core')['useMouseInElement'] | ||||||
|  |   const useMousePressed: typeof import('@vueuse/core')['useMousePressed'] | ||||||
|  |   const useMutationObserver: typeof import('@vueuse/core')['useMutationObserver'] | ||||||
|  |   const useNavigatorLanguage: typeof import('@vueuse/core')['useNavigatorLanguage'] | ||||||
|  |   const useNetwork: typeof import('@vueuse/core')['useNetwork'] | ||||||
|  |   const useNow: typeof import('@vueuse/core')['useNow'] | ||||||
|  |   const useObjectUrl: typeof import('@vueuse/core')['useObjectUrl'] | ||||||
|  |   const useOffsetPagination: typeof import('@vueuse/core')['useOffsetPagination'] | ||||||
|  |   const useOnline: typeof import('@vueuse/core')['useOnline'] | ||||||
|  |   const usePageLeave: typeof import('@vueuse/core')['usePageLeave'] | ||||||
|  |   const useParallax: typeof import('@vueuse/core')['useParallax'] | ||||||
|  |   const usePermission: typeof import('@vueuse/core')['usePermission'] | ||||||
|  |   const usePointer: typeof import('@vueuse/core')['usePointer'] | ||||||
|  |   const usePointerSwipe: typeof import('@vueuse/core')['usePointerSwipe'] | ||||||
|  |   const usePreferredColorScheme: typeof import('@vueuse/core')['usePreferredColorScheme'] | ||||||
|  |   const usePreferredDark: typeof import('@vueuse/core')['usePreferredDark'] | ||||||
|  |   const usePreferredLanguages: typeof import('@vueuse/core')['usePreferredLanguages'] | ||||||
|  |   const usePreferredReducedMotion: typeof import('@vueuse/core')['usePreferredReducedMotion'] | ||||||
|  |   const useRafFn: typeof import('@vueuse/core')['useRafFn'] | ||||||
|  |   const useRefHistory: typeof import('@vueuse/core')['useRefHistory'] | ||||||
|  |   const useResizeObserver: typeof import('@vueuse/core')['useResizeObserver'] | ||||||
|  |   const useRoute: typeof import('vue-router')['useRoute'] | ||||||
|  |   const useRouter: typeof import('vue-router')['useRouter'] | ||||||
|  |   const useScreenOrientation: typeof import('@vueuse/core')['useScreenOrientation'] | ||||||
|  |   const useScreenSafeArea: typeof import('@vueuse/core')['useScreenSafeArea'] | ||||||
|  |   const useScriptTag: typeof import('@vueuse/core')['useScriptTag'] | ||||||
|  |   const useScroll: typeof import('@vueuse/core')['useScroll'] | ||||||
|  |   const useScrollLock: typeof import('@vueuse/core')['useScrollLock'] | ||||||
|  |   const useSessionStorage: typeof import('@vueuse/core')['useSessionStorage'] | ||||||
|  |   const useShare: typeof import('@vueuse/core')['useShare'] | ||||||
|  |   const useSlots: typeof import('vue')['useSlots'] | ||||||
|  |   const useSpeechRecognition: typeof import('@vueuse/core')['useSpeechRecognition'] | ||||||
|  |   const useSpeechSynthesis: typeof import('@vueuse/core')['useSpeechSynthesis'] | ||||||
|  |   const useStepper: typeof import('@vueuse/core')['useStepper'] | ||||||
|  |   const useStorage: typeof import('@vueuse/core')['useStorage'] | ||||||
|  |   const useStorageAsync: typeof import('@vueuse/core')['useStorageAsync'] | ||||||
|  |   const useStyleTag: typeof import('@vueuse/core')['useStyleTag'] | ||||||
|  |   const useSupported: typeof import('@vueuse/core')['useSupported'] | ||||||
|  |   const useSwipe: typeof import('@vueuse/core')['useSwipe'] | ||||||
|  |   const useTemplateRefsList: typeof import('@vueuse/core')['useTemplateRefsList'] | ||||||
|  |   const useTextDirection: typeof import('@vueuse/core')['useTextDirection'] | ||||||
|  |   const useTextSelection: typeof import('@vueuse/core')['useTextSelection'] | ||||||
|  |   const useTextareaAutosize: typeof import('@vueuse/core')['useTextareaAutosize'] | ||||||
|  |   const useThrottle: typeof import('@vueuse/core')['useThrottle'] | ||||||
|  |   const useThrottleFn: typeof import('@vueuse/core')['useThrottleFn'] | ||||||
|  |   const useThrottledRefHistory: typeof import('@vueuse/core')['useThrottledRefHistory'] | ||||||
|  |   const useTimeAgo: typeof import('@vueuse/core')['useTimeAgo'] | ||||||
|  |   const useTimeout: typeof import('@vueuse/core')['useTimeout'] | ||||||
|  |   const useTimeoutFn: typeof import('@vueuse/core')['useTimeoutFn'] | ||||||
|  |   const useTimeoutPoll: typeof import('@vueuse/core')['useTimeoutPoll'] | ||||||
|  |   const useTimestamp: typeof import('@vueuse/core')['useTimestamp'] | ||||||
|  |   const useTitle: typeof import('@vueuse/core')['useTitle'] | ||||||
|  |   const useToNumber: typeof import('@vueuse/core')['useToNumber'] | ||||||
|  |   const useToString: typeof import('@vueuse/core')['useToString'] | ||||||
|  |   const useToggle: typeof import('@vueuse/core')['useToggle'] | ||||||
|  |   const useTransition: typeof import('@vueuse/core')['useTransition'] | ||||||
|  |   const useUrlSearchParams: typeof import('@vueuse/core')['useUrlSearchParams'] | ||||||
|  |   const useUserMedia: typeof import('@vueuse/core')['useUserMedia'] | ||||||
|  |   const useUserStore: typeof import('./store/user')['useUserStore'] | ||||||
|  |   const useVModel: typeof import('@vueuse/core')['useVModel'] | ||||||
|  |   const useVModels: typeof import('@vueuse/core')['useVModels'] | ||||||
|  |   const useVibrate: typeof import('@vueuse/core')['useVibrate'] | ||||||
|  |   const useVirtualList: typeof import('@vueuse/core')['useVirtualList'] | ||||||
|  |   const useWakeLock: typeof import('@vueuse/core')['useWakeLock'] | ||||||
|  |   const useWebNotification: typeof import('@vueuse/core')['useWebNotification'] | ||||||
|  |   const useWebSocket: typeof import('@vueuse/core')['useWebSocket'] | ||||||
|  |   const useWebWorker: typeof import('@vueuse/core')['useWebWorker'] | ||||||
|  |   const useWebWorkerFn: typeof import('@vueuse/core')['useWebWorkerFn'] | ||||||
|  |   const useWindowFocus: typeof import('@vueuse/core')['useWindowFocus'] | ||||||
|  |   const useWindowScroll: typeof import('@vueuse/core')['useWindowScroll'] | ||||||
|  |   const useWindowSize: typeof import('@vueuse/core')['useWindowSize'] | ||||||
|  |   const watch: typeof import('vue')['watch'] | ||||||
|  |   const watchArray: typeof import('@vueuse/core')['watchArray'] | ||||||
|  |   const watchAtMost: typeof import('@vueuse/core')['watchAtMost'] | ||||||
|  |   const watchDebounced: typeof import('@vueuse/core')['watchDebounced'] | ||||||
|  |   const watchEffect: typeof import('vue')['watchEffect'] | ||||||
|  |   const watchIgnorable: typeof import('@vueuse/core')['watchIgnorable'] | ||||||
|  |   const watchOnce: typeof import('@vueuse/core')['watchOnce'] | ||||||
|  |   const watchPausable: typeof import('@vueuse/core')['watchPausable'] | ||||||
|  |   const watchPostEffect: typeof import('vue')['watchPostEffect'] | ||||||
|  |   const watchSyncEffect: typeof import('vue')['watchSyncEffect'] | ||||||
|  |   const watchThrottled: typeof import('@vueuse/core')['watchThrottled'] | ||||||
|  |   const watchTriggerable: typeof import('@vueuse/core')['watchTriggerable'] | ||||||
|  |   const watchWithFilter: typeof import('@vueuse/core')['watchWithFilter'] | ||||||
|  |   const whenever: typeof import('@vueuse/core')['whenever'] | ||||||
|  | } | ||||||
|  | // for vue template auto import | ||||||
|  | import { UnwrapRef } from 'vue' | ||||||
|  | declare module '@vue/runtime-core' { | ||||||
|  |   interface ComponentCustomProperties { | ||||||
|  |     readonly $$: UnwrapRef<typeof import('vue/macros')['$$']> | ||||||
|  |     readonly $: UnwrapRef<typeof import('vue/macros')['$']> | ||||||
|  |     readonly $computed: UnwrapRef<typeof import('vue/macros')['$computed']> | ||||||
|  |     readonly $customRef: UnwrapRef<typeof import('vue/macros')['$customRef']> | ||||||
|  |     readonly $ref: UnwrapRef<typeof import('vue/macros')['$ref']> | ||||||
|  |     readonly $shallowRef: UnwrapRef<typeof import('vue/macros')['$shallowRef']> | ||||||
|  |     readonly $toRef: UnwrapRef<typeof import('vue/macros')['$toRef']> | ||||||
|  |     readonly EffectScope: UnwrapRef<typeof import('vue')['EffectScope']> | ||||||
|  |     readonly asyncComputed: UnwrapRef<typeof import('@vueuse/core')['asyncComputed']> | ||||||
|  |     readonly autoResetRef: UnwrapRef<typeof import('@vueuse/core')['autoResetRef']> | ||||||
|  |     readonly computed: UnwrapRef<typeof import('vue')['computed']> | ||||||
|  |     readonly computedAsync: UnwrapRef<typeof import('@vueuse/core')['computedAsync']> | ||||||
|  |     readonly computedEager: UnwrapRef<typeof import('@vueuse/core')['computedEager']> | ||||||
|  |     readonly computedInject: UnwrapRef<typeof import('@vueuse/core')['computedInject']> | ||||||
|  |     readonly computedWithControl: UnwrapRef<typeof import('@vueuse/core')['computedWithControl']> | ||||||
|  |     readonly controlledComputed: UnwrapRef<typeof import('@vueuse/core')['controlledComputed']> | ||||||
|  |     readonly controlledRef: UnwrapRef<typeof import('@vueuse/core')['controlledRef']> | ||||||
|  |     readonly createApp: UnwrapRef<typeof import('vue')['createApp']> | ||||||
|  |     readonly createEventHook: UnwrapRef<typeof import('@vueuse/core')['createEventHook']> | ||||||
|  |     readonly createGlobalState: UnwrapRef<typeof import('@vueuse/core')['createGlobalState']> | ||||||
|  |     readonly createInjectionState: UnwrapRef<typeof import('@vueuse/core')['createInjectionState']> | ||||||
|  |     readonly createReactiveFn: UnwrapRef<typeof import('@vueuse/core')['createReactiveFn']> | ||||||
|  |     readonly createSharedComposable: UnwrapRef<typeof import('@vueuse/core')['createSharedComposable']> | ||||||
|  |     readonly createUnrefFn: UnwrapRef<typeof import('@vueuse/core')['createUnrefFn']> | ||||||
|  |     readonly customRef: UnwrapRef<typeof import('vue')['customRef']> | ||||||
|  |     readonly debouncedRef: UnwrapRef<typeof import('@vueuse/core')['debouncedRef']> | ||||||
|  |     readonly debouncedWatch: UnwrapRef<typeof import('@vueuse/core')['debouncedWatch']> | ||||||
|  |     readonly defineAsyncComponent: UnwrapRef<typeof import('vue')['defineAsyncComponent']> | ||||||
|  |     readonly defineComponent: UnwrapRef<typeof import('vue')['defineComponent']> | ||||||
|  |     readonly eagerComputed: UnwrapRef<typeof import('@vueuse/core')['eagerComputed']> | ||||||
|  |     readonly effectScope: UnwrapRef<typeof import('vue')['effectScope']> | ||||||
|  |     readonly extendRef: UnwrapRef<typeof import('@vueuse/core')['extendRef']> | ||||||
|  |     readonly getCurrentInstance: UnwrapRef<typeof import('vue')['getCurrentInstance']> | ||||||
|  |     readonly getCurrentScope: UnwrapRef<typeof import('vue')['getCurrentScope']> | ||||||
|  |     readonly h: UnwrapRef<typeof import('vue')['h']> | ||||||
|  |     readonly ignorableWatch: UnwrapRef<typeof import('@vueuse/core')['ignorableWatch']> | ||||||
|  |     readonly inject: UnwrapRef<typeof import('vue')['inject']> | ||||||
|  |     readonly isDark: UnwrapRef<typeof import('./composables/dark')['isDark']> | ||||||
|  |     readonly isDefined: UnwrapRef<typeof import('@vueuse/core')['isDefined']> | ||||||
|  |     readonly isProxy: UnwrapRef<typeof import('vue')['isProxy']> | ||||||
|  |     readonly isReactive: UnwrapRef<typeof import('vue')['isReactive']> | ||||||
|  |     readonly isReadonly: UnwrapRef<typeof import('vue')['isReadonly']> | ||||||
|  |     readonly isRef: UnwrapRef<typeof import('vue')['isRef']> | ||||||
|  |     readonly makeDestructurable: UnwrapRef<typeof import('@vueuse/core')['makeDestructurable']> | ||||||
|  |     readonly markRaw: UnwrapRef<typeof import('vue')['markRaw']> | ||||||
|  |     readonly nextTick: UnwrapRef<typeof import('vue')['nextTick']> | ||||||
|  |     readonly onActivated: UnwrapRef<typeof import('vue')['onActivated']> | ||||||
|  |     readonly onBeforeMount: UnwrapRef<typeof import('vue')['onBeforeMount']> | ||||||
|  |     readonly onBeforeUnmount: UnwrapRef<typeof import('vue')['onBeforeUnmount']> | ||||||
|  |     readonly onBeforeUpdate: UnwrapRef<typeof import('vue')['onBeforeUpdate']> | ||||||
|  |     readonly onClickOutside: UnwrapRef<typeof import('@vueuse/core')['onClickOutside']> | ||||||
|  |     readonly onDeactivated: UnwrapRef<typeof import('vue')['onDeactivated']> | ||||||
|  |     readonly onErrorCaptured: UnwrapRef<typeof import('vue')['onErrorCaptured']> | ||||||
|  |     readonly onKeyStroke: UnwrapRef<typeof import('@vueuse/core')['onKeyStroke']> | ||||||
|  |     readonly onLongPress: UnwrapRef<typeof import('@vueuse/core')['onLongPress']> | ||||||
|  |     readonly onMounted: UnwrapRef<typeof import('vue')['onMounted']> | ||||||
|  |     readonly onRenderTracked: UnwrapRef<typeof import('vue')['onRenderTracked']> | ||||||
|  |     readonly onRenderTriggered: UnwrapRef<typeof import('vue')['onRenderTriggered']> | ||||||
|  |     readonly onScopeDispose: UnwrapRef<typeof import('vue')['onScopeDispose']> | ||||||
|  |     readonly onServerPrefetch: UnwrapRef<typeof import('vue')['onServerPrefetch']> | ||||||
|  |     readonly onStartTyping: UnwrapRef<typeof import('@vueuse/core')['onStartTyping']> | ||||||
|  |     readonly onUnmounted: UnwrapRef<typeof import('vue')['onUnmounted']> | ||||||
|  |     readonly onUpdated: UnwrapRef<typeof import('vue')['onUpdated']> | ||||||
|  |     readonly pausableWatch: UnwrapRef<typeof import('@vueuse/core')['pausableWatch']> | ||||||
|  |     readonly preferredDark: UnwrapRef<typeof import('./composables/dark')['preferredDark']> | ||||||
|  |     readonly provide: UnwrapRef<typeof import('vue')['provide']> | ||||||
|  |     readonly reactify: UnwrapRef<typeof import('@vueuse/core')['reactify']> | ||||||
|  |     readonly reactifyObject: UnwrapRef<typeof import('@vueuse/core')['reactifyObject']> | ||||||
|  |     readonly reactive: UnwrapRef<typeof import('vue')['reactive']> | ||||||
|  |     readonly reactiveComputed: UnwrapRef<typeof import('@vueuse/core')['reactiveComputed']> | ||||||
|  |     readonly reactiveOmit: UnwrapRef<typeof import('@vueuse/core')['reactiveOmit']> | ||||||
|  |     readonly reactivePick: UnwrapRef<typeof import('@vueuse/core')['reactivePick']> | ||||||
|  |     readonly readonly: UnwrapRef<typeof import('vue')['readonly']> | ||||||
|  |     readonly ref: UnwrapRef<typeof import('vue')['ref']> | ||||||
|  |     readonly refAutoReset: UnwrapRef<typeof import('@vueuse/core')['refAutoReset']> | ||||||
|  |     readonly refDebounced: UnwrapRef<typeof import('@vueuse/core')['refDebounced']> | ||||||
|  |     readonly refDefault: UnwrapRef<typeof import('@vueuse/core')['refDefault']> | ||||||
|  |     readonly refThrottled: UnwrapRef<typeof import('@vueuse/core')['refThrottled']> | ||||||
|  |     readonly refWithControl: UnwrapRef<typeof import('@vueuse/core')['refWithControl']> | ||||||
|  |     readonly resolveComponent: UnwrapRef<typeof import('vue')['resolveComponent']> | ||||||
|  |     readonly resolveRef: UnwrapRef<typeof import('@vueuse/core')['resolveRef']> | ||||||
|  |     readonly resolveUnref: UnwrapRef<typeof import('@vueuse/core')['resolveUnref']> | ||||||
|  |     readonly shallowReactive: UnwrapRef<typeof import('vue')['shallowReactive']> | ||||||
|  |     readonly shallowReadonly: UnwrapRef<typeof import('vue')['shallowReadonly']> | ||||||
|  |     readonly shallowRef: UnwrapRef<typeof import('vue')['shallowRef']> | ||||||
|  |     readonly syncRef: UnwrapRef<typeof import('@vueuse/core')['syncRef']> | ||||||
|  |     readonly syncRefs: UnwrapRef<typeof import('@vueuse/core')['syncRefs']> | ||||||
|  |     readonly templateRef: UnwrapRef<typeof import('@vueuse/core')['templateRef']> | ||||||
|  |     readonly throttledRef: UnwrapRef<typeof import('@vueuse/core')['throttledRef']> | ||||||
|  |     readonly throttledWatch: UnwrapRef<typeof import('@vueuse/core')['throttledWatch']> | ||||||
|  |     readonly toRaw: UnwrapRef<typeof import('vue')['toRaw']> | ||||||
|  |     readonly toReactive: UnwrapRef<typeof import('@vueuse/core')['toReactive']> | ||||||
|  |     readonly toRef: UnwrapRef<typeof import('vue')['toRef']> | ||||||
|  |     readonly toRefs: UnwrapRef<typeof import('vue')['toRefs']> | ||||||
|  |     readonly toggleDark: UnwrapRef<typeof import('./composables/dark')['toggleDark']> | ||||||
|  |     readonly triggerRef: UnwrapRef<typeof import('vue')['triggerRef']> | ||||||
|  |     readonly tryOnBeforeMount: UnwrapRef<typeof import('@vueuse/core')['tryOnBeforeMount']> | ||||||
|  |     readonly tryOnBeforeUnmount: UnwrapRef<typeof import('@vueuse/core')['tryOnBeforeUnmount']> | ||||||
|  |     readonly tryOnMounted: UnwrapRef<typeof import('@vueuse/core')['tryOnMounted']> | ||||||
|  |     readonly tryOnScopeDispose: UnwrapRef<typeof import('@vueuse/core')['tryOnScopeDispose']> | ||||||
|  |     readonly tryOnUnmounted: UnwrapRef<typeof import('@vueuse/core')['tryOnUnmounted']> | ||||||
|  |     readonly unref: UnwrapRef<typeof import('vue')['unref']> | ||||||
|  |     readonly unrefElement: UnwrapRef<typeof import('@vueuse/core')['unrefElement']> | ||||||
|  |     readonly until: UnwrapRef<typeof import('@vueuse/core')['until']> | ||||||
|  |     readonly useActiveElement: UnwrapRef<typeof import('@vueuse/core')['useActiveElement']> | ||||||
|  |     readonly useArrayEvery: UnwrapRef<typeof import('@vueuse/core')['useArrayEvery']> | ||||||
|  |     readonly useArrayFilter: UnwrapRef<typeof import('@vueuse/core')['useArrayFilter']> | ||||||
|  |     readonly useArrayFind: UnwrapRef<typeof import('@vueuse/core')['useArrayFind']> | ||||||
|  |     readonly useArrayFindIndex: UnwrapRef<typeof import('@vueuse/core')['useArrayFindIndex']> | ||||||
|  |     readonly useArrayJoin: UnwrapRef<typeof import('@vueuse/core')['useArrayJoin']> | ||||||
|  |     readonly useArrayMap: UnwrapRef<typeof import('@vueuse/core')['useArrayMap']> | ||||||
|  |     readonly useArrayReduce: UnwrapRef<typeof import('@vueuse/core')['useArrayReduce']> | ||||||
|  |     readonly useArraySome: UnwrapRef<typeof import('@vueuse/core')['useArraySome']> | ||||||
|  |     readonly useAsyncQueue: UnwrapRef<typeof import('@vueuse/core')['useAsyncQueue']> | ||||||
|  |     readonly useAsyncState: UnwrapRef<typeof import('@vueuse/core')['useAsyncState']> | ||||||
|  |     readonly useAttrs: UnwrapRef<typeof import('vue')['useAttrs']> | ||||||
|  |     readonly useBase64: UnwrapRef<typeof import('@vueuse/core')['useBase64']> | ||||||
|  |     readonly useBattery: UnwrapRef<typeof import('@vueuse/core')['useBattery']> | ||||||
|  |     readonly useBluetooth: UnwrapRef<typeof import('@vueuse/core')['useBluetooth']> | ||||||
|  |     readonly useBreakpoints: UnwrapRef<typeof import('@vueuse/core')['useBreakpoints']> | ||||||
|  |     readonly useBroadcastChannel: UnwrapRef<typeof import('@vueuse/core')['useBroadcastChannel']> | ||||||
|  |     readonly useBrowserLocation: UnwrapRef<typeof import('@vueuse/core')['useBrowserLocation']> | ||||||
|  |     readonly useCached: UnwrapRef<typeof import('@vueuse/core')['useCached']> | ||||||
|  |     readonly useClipboard: UnwrapRef<typeof import('@vueuse/core')['useClipboard']> | ||||||
|  |     readonly useColorMode: UnwrapRef<typeof import('@vueuse/core')['useColorMode']> | ||||||
|  |     readonly useConfirmDialog: UnwrapRef<typeof import('@vueuse/core')['useConfirmDialog']> | ||||||
|  |     readonly useCounter: UnwrapRef<typeof import('@vueuse/core')['useCounter']> | ||||||
|  |     readonly useCssModule: UnwrapRef<typeof import('vue')['useCssModule']> | ||||||
|  |     readonly useCssVar: UnwrapRef<typeof import('@vueuse/core')['useCssVar']> | ||||||
|  |     readonly useCssVars: UnwrapRef<typeof import('vue')['useCssVars']> | ||||||
|  |     readonly useCurrentElement: UnwrapRef<typeof import('@vueuse/core')['useCurrentElement']> | ||||||
|  |     readonly useCycleList: UnwrapRef<typeof import('@vueuse/core')['useCycleList']> | ||||||
|  |     readonly useDark: UnwrapRef<typeof import('@vueuse/core')['useDark']> | ||||||
|  |     readonly useDateFormat: UnwrapRef<typeof import('@vueuse/core')['useDateFormat']> | ||||||
|  |     readonly useDebounce: UnwrapRef<typeof import('@vueuse/core')['useDebounce']> | ||||||
|  |     readonly useDebounceFn: UnwrapRef<typeof import('@vueuse/core')['useDebounceFn']> | ||||||
|  |     readonly useDebouncedRefHistory: UnwrapRef<typeof import('@vueuse/core')['useDebouncedRefHistory']> | ||||||
|  |     readonly useDeviceMotion: UnwrapRef<typeof import('@vueuse/core')['useDeviceMotion']> | ||||||
|  |     readonly useDeviceOrientation: UnwrapRef<typeof import('@vueuse/core')['useDeviceOrientation']> | ||||||
|  |     readonly useDevicePixelRatio: UnwrapRef<typeof import('@vueuse/core')['useDevicePixelRatio']> | ||||||
|  |     readonly useDevicesList: UnwrapRef<typeof import('@vueuse/core')['useDevicesList']> | ||||||
|  |     readonly useDisplayMedia: UnwrapRef<typeof import('@vueuse/core')['useDisplayMedia']> | ||||||
|  |     readonly useDocumentVisibility: UnwrapRef<typeof import('@vueuse/core')['useDocumentVisibility']> | ||||||
|  |     readonly useDraggable: UnwrapRef<typeof import('@vueuse/core')['useDraggable']> | ||||||
|  |     readonly useDropZone: UnwrapRef<typeof import('@vueuse/core')['useDropZone']> | ||||||
|  |     readonly useElementBounding: UnwrapRef<typeof import('@vueuse/core')['useElementBounding']> | ||||||
|  |     readonly useElementByPoint: UnwrapRef<typeof import('@vueuse/core')['useElementByPoint']> | ||||||
|  |     readonly useElementHover: UnwrapRef<typeof import('@vueuse/core')['useElementHover']> | ||||||
|  |     readonly useElementSize: UnwrapRef<typeof import('@vueuse/core')['useElementSize']> | ||||||
|  |     readonly useElementVisibility: UnwrapRef<typeof import('@vueuse/core')['useElementVisibility']> | ||||||
|  |     readonly useEventBus: UnwrapRef<typeof import('@vueuse/core')['useEventBus']> | ||||||
|  |     readonly useEventListener: UnwrapRef<typeof import('@vueuse/core')['useEventListener']> | ||||||
|  |     readonly useEventSource: UnwrapRef<typeof import('@vueuse/core')['useEventSource']> | ||||||
|  |     readonly useEyeDropper: UnwrapRef<typeof import('@vueuse/core')['useEyeDropper']> | ||||||
|  |     readonly useFavicon: UnwrapRef<typeof import('@vueuse/core')['useFavicon']> | ||||||
|  |     readonly useFetch: UnwrapRef<typeof import('@vueuse/core')['useFetch']> | ||||||
|  |     readonly useFileDialog: UnwrapRef<typeof import('@vueuse/core')['useFileDialog']> | ||||||
|  |     readonly useFileSystemAccess: UnwrapRef<typeof import('@vueuse/core')['useFileSystemAccess']> | ||||||
|  |     readonly useFocus: UnwrapRef<typeof import('@vueuse/core')['useFocus']> | ||||||
|  |     readonly useFocusWithin: UnwrapRef<typeof import('@vueuse/core')['useFocusWithin']> | ||||||
|  |     readonly useFps: UnwrapRef<typeof import('@vueuse/core')['useFps']> | ||||||
|  |     readonly useFullscreen: UnwrapRef<typeof import('@vueuse/core')['useFullscreen']> | ||||||
|  |     readonly useGamepad: UnwrapRef<typeof import('@vueuse/core')['useGamepad']> | ||||||
|  |     readonly useGeolocation: UnwrapRef<typeof import('@vueuse/core')['useGeolocation']> | ||||||
|  |     readonly useHead: UnwrapRef<typeof import('@vueuse/head')['useHead']> | ||||||
|  |     readonly useI18n: UnwrapRef<typeof import('vue-i18n')['useI18n']> | ||||||
|  |     readonly useIdle: UnwrapRef<typeof import('@vueuse/core')['useIdle']> | ||||||
|  |     readonly useImage: UnwrapRef<typeof import('@vueuse/core')['useImage']> | ||||||
|  |     readonly useInfiniteScroll: UnwrapRef<typeof import('@vueuse/core')['useInfiniteScroll']> | ||||||
|  |     readonly useIntersectionObserver: UnwrapRef<typeof import('@vueuse/core')['useIntersectionObserver']> | ||||||
|  |     readonly useInterval: UnwrapRef<typeof import('@vueuse/core')['useInterval']> | ||||||
|  |     readonly useIntervalFn: UnwrapRef<typeof import('@vueuse/core')['useIntervalFn']> | ||||||
|  |     readonly useKeyModifier: UnwrapRef<typeof import('@vueuse/core')['useKeyModifier']> | ||||||
|  |     readonly useLastChanged: UnwrapRef<typeof import('@vueuse/core')['useLastChanged']> | ||||||
|  |     readonly useLocalStorage: UnwrapRef<typeof import('@vueuse/core')['useLocalStorage']> | ||||||
|  |     readonly useMagicKeys: UnwrapRef<typeof import('@vueuse/core')['useMagicKeys']> | ||||||
|  |     readonly useManualRefHistory: UnwrapRef<typeof import('@vueuse/core')['useManualRefHistory']> | ||||||
|  |     readonly useMediaControls: UnwrapRef<typeof import('@vueuse/core')['useMediaControls']> | ||||||
|  |     readonly useMediaQuery: UnwrapRef<typeof import('@vueuse/core')['useMediaQuery']> | ||||||
|  |     readonly useMemoize: UnwrapRef<typeof import('@vueuse/core')['useMemoize']> | ||||||
|  |     readonly useMemory: UnwrapRef<typeof import('@vueuse/core')['useMemory']> | ||||||
|  |     readonly useMounted: UnwrapRef<typeof import('@vueuse/core')['useMounted']> | ||||||
|  |     readonly useMouse: UnwrapRef<typeof import('@vueuse/core')['useMouse']> | ||||||
|  |     readonly useMouseInElement: UnwrapRef<typeof import('@vueuse/core')['useMouseInElement']> | ||||||
|  |     readonly useMousePressed: UnwrapRef<typeof import('@vueuse/core')['useMousePressed']> | ||||||
|  |     readonly useMutationObserver: UnwrapRef<typeof import('@vueuse/core')['useMutationObserver']> | ||||||
|  |     readonly useNavigatorLanguage: UnwrapRef<typeof import('@vueuse/core')['useNavigatorLanguage']> | ||||||
|  |     readonly useNetwork: UnwrapRef<typeof import('@vueuse/core')['useNetwork']> | ||||||
|  |     readonly useNow: UnwrapRef<typeof import('@vueuse/core')['useNow']> | ||||||
|  |     readonly useObjectUrl: UnwrapRef<typeof import('@vueuse/core')['useObjectUrl']> | ||||||
|  |     readonly useOffsetPagination: UnwrapRef<typeof import('@vueuse/core')['useOffsetPagination']> | ||||||
|  |     readonly useOnline: UnwrapRef<typeof import('@vueuse/core')['useOnline']> | ||||||
|  |     readonly usePageLeave: UnwrapRef<typeof import('@vueuse/core')['usePageLeave']> | ||||||
|  |     readonly useParallax: UnwrapRef<typeof import('@vueuse/core')['useParallax']> | ||||||
|  |     readonly usePermission: UnwrapRef<typeof import('@vueuse/core')['usePermission']> | ||||||
|  |     readonly usePointer: UnwrapRef<typeof import('@vueuse/core')['usePointer']> | ||||||
|  |     readonly usePointerSwipe: UnwrapRef<typeof import('@vueuse/core')['usePointerSwipe']> | ||||||
|  |     readonly usePreferredColorScheme: UnwrapRef<typeof import('@vueuse/core')['usePreferredColorScheme']> | ||||||
|  |     readonly usePreferredDark: UnwrapRef<typeof import('@vueuse/core')['usePreferredDark']> | ||||||
|  |     readonly usePreferredLanguages: UnwrapRef<typeof import('@vueuse/core')['usePreferredLanguages']> | ||||||
|  |     readonly usePreferredReducedMotion: UnwrapRef<typeof import('@vueuse/core')['usePreferredReducedMotion']> | ||||||
|  |     readonly useRafFn: UnwrapRef<typeof import('@vueuse/core')['useRafFn']> | ||||||
|  |     readonly useRefHistory: UnwrapRef<typeof import('@vueuse/core')['useRefHistory']> | ||||||
|  |     readonly useResizeObserver: UnwrapRef<typeof import('@vueuse/core')['useResizeObserver']> | ||||||
|  |     readonly useRoute: UnwrapRef<typeof import('vue-router')['useRoute']> | ||||||
|  |     readonly useRouter: UnwrapRef<typeof import('vue-router')['useRouter']> | ||||||
|  |     readonly useScreenOrientation: UnwrapRef<typeof import('@vueuse/core')['useScreenOrientation']> | ||||||
|  |     readonly useScreenSafeArea: UnwrapRef<typeof import('@vueuse/core')['useScreenSafeArea']> | ||||||
|  |     readonly useScriptTag: UnwrapRef<typeof import('@vueuse/core')['useScriptTag']> | ||||||
|  |     readonly useScroll: UnwrapRef<typeof import('@vueuse/core')['useScroll']> | ||||||
|  |     readonly useScrollLock: UnwrapRef<typeof import('@vueuse/core')['useScrollLock']> | ||||||
|  |     readonly useSessionStorage: UnwrapRef<typeof import('@vueuse/core')['useSessionStorage']> | ||||||
|  |     readonly useShare: UnwrapRef<typeof import('@vueuse/core')['useShare']> | ||||||
|  |     readonly useSlots: UnwrapRef<typeof import('vue')['useSlots']> | ||||||
|  |     readonly useSpeechRecognition: UnwrapRef<typeof import('@vueuse/core')['useSpeechRecognition']> | ||||||
|  |     readonly useSpeechSynthesis: UnwrapRef<typeof import('@vueuse/core')['useSpeechSynthesis']> | ||||||
|  |     readonly useStepper: UnwrapRef<typeof import('@vueuse/core')['useStepper']> | ||||||
|  |     readonly useStorage: UnwrapRef<typeof import('@vueuse/core')['useStorage']> | ||||||
|  |     readonly useStorageAsync: UnwrapRef<typeof import('@vueuse/core')['useStorageAsync']> | ||||||
|  |     readonly useStyleTag: UnwrapRef<typeof import('@vueuse/core')['useStyleTag']> | ||||||
|  |     readonly useSupported: UnwrapRef<typeof import('@vueuse/core')['useSupported']> | ||||||
|  |     readonly useSwipe: UnwrapRef<typeof import('@vueuse/core')['useSwipe']> | ||||||
|  |     readonly useTemplateRefsList: UnwrapRef<typeof import('@vueuse/core')['useTemplateRefsList']> | ||||||
|  |     readonly useTextDirection: UnwrapRef<typeof import('@vueuse/core')['useTextDirection']> | ||||||
|  |     readonly useTextSelection: UnwrapRef<typeof import('@vueuse/core')['useTextSelection']> | ||||||
|  |     readonly useTextareaAutosize: UnwrapRef<typeof import('@vueuse/core')['useTextareaAutosize']> | ||||||
|  |     readonly useThrottle: UnwrapRef<typeof import('@vueuse/core')['useThrottle']> | ||||||
|  |     readonly useThrottleFn: UnwrapRef<typeof import('@vueuse/core')['useThrottleFn']> | ||||||
|  |     readonly useThrottledRefHistory: UnwrapRef<typeof import('@vueuse/core')['useThrottledRefHistory']> | ||||||
|  |     readonly useTimeAgo: UnwrapRef<typeof import('@vueuse/core')['useTimeAgo']> | ||||||
|  |     readonly useTimeout: UnwrapRef<typeof import('@vueuse/core')['useTimeout']> | ||||||
|  |     readonly useTimeoutFn: UnwrapRef<typeof import('@vueuse/core')['useTimeoutFn']> | ||||||
|  |     readonly useTimeoutPoll: UnwrapRef<typeof import('@vueuse/core')['useTimeoutPoll']> | ||||||
|  |     readonly useTimestamp: UnwrapRef<typeof import('@vueuse/core')['useTimestamp']> | ||||||
|  |     readonly useTitle: UnwrapRef<typeof import('@vueuse/core')['useTitle']> | ||||||
|  |     readonly useToNumber: UnwrapRef<typeof import('@vueuse/core')['useToNumber']> | ||||||
|  |     readonly useToString: UnwrapRef<typeof import('@vueuse/core')['useToString']> | ||||||
|  |     readonly useToggle: UnwrapRef<typeof import('@vueuse/core')['useToggle']> | ||||||
|  |     readonly useTransition: UnwrapRef<typeof import('@vueuse/core')['useTransition']> | ||||||
|  |     readonly useUrlSearchParams: UnwrapRef<typeof import('@vueuse/core')['useUrlSearchParams']> | ||||||
|  |     readonly useUserMedia: UnwrapRef<typeof import('@vueuse/core')['useUserMedia']> | ||||||
|  |     readonly useUserStore: UnwrapRef<typeof import('./store/user')['useUserStore']> | ||||||
|  |     readonly useVModel: UnwrapRef<typeof import('@vueuse/core')['useVModel']> | ||||||
|  |     readonly useVModels: UnwrapRef<typeof import('@vueuse/core')['useVModels']> | ||||||
|  |     readonly useVibrate: UnwrapRef<typeof import('@vueuse/core')['useVibrate']> | ||||||
|  |     readonly useVirtualList: UnwrapRef<typeof import('@vueuse/core')['useVirtualList']> | ||||||
|  |     readonly useWakeLock: UnwrapRef<typeof import('@vueuse/core')['useWakeLock']> | ||||||
|  |     readonly useWebNotification: UnwrapRef<typeof import('@vueuse/core')['useWebNotification']> | ||||||
|  |     readonly useWebSocket: UnwrapRef<typeof import('@vueuse/core')['useWebSocket']> | ||||||
|  |     readonly useWebWorker: UnwrapRef<typeof import('@vueuse/core')['useWebWorker']> | ||||||
|  |     readonly useWebWorkerFn: UnwrapRef<typeof import('@vueuse/core')['useWebWorkerFn']> | ||||||
|  |     readonly useWindowFocus: UnwrapRef<typeof import('@vueuse/core')['useWindowFocus']> | ||||||
|  |     readonly useWindowScroll: UnwrapRef<typeof import('@vueuse/core')['useWindowScroll']> | ||||||
|  |     readonly useWindowSize: UnwrapRef<typeof import('@vueuse/core')['useWindowSize']> | ||||||
|  |     readonly watch: UnwrapRef<typeof import('vue')['watch']> | ||||||
|  |     readonly watchArray: UnwrapRef<typeof import('@vueuse/core')['watchArray']> | ||||||
|  |     readonly watchAtMost: UnwrapRef<typeof import('@vueuse/core')['watchAtMost']> | ||||||
|  |     readonly watchDebounced: UnwrapRef<typeof import('@vueuse/core')['watchDebounced']> | ||||||
|  |     readonly watchEffect: UnwrapRef<typeof import('vue')['watchEffect']> | ||||||
|  |     readonly watchIgnorable: UnwrapRef<typeof import('@vueuse/core')['watchIgnorable']> | ||||||
|  |     readonly watchOnce: UnwrapRef<typeof import('@vueuse/core')['watchOnce']> | ||||||
|  |     readonly watchPausable: UnwrapRef<typeof import('@vueuse/core')['watchPausable']> | ||||||
|  |     readonly watchPostEffect: UnwrapRef<typeof import('vue')['watchPostEffect']> | ||||||
|  |     readonly watchSyncEffect: UnwrapRef<typeof import('vue')['watchSyncEffect']> | ||||||
|  |     readonly watchThrottled: UnwrapRef<typeof import('@vueuse/core')['watchThrottled']> | ||||||
|  |     readonly watchTriggerable: UnwrapRef<typeof import('@vueuse/core')['watchTriggerable']> | ||||||
|  |     readonly watchWithFilter: UnwrapRef<typeof import('@vueuse/core')['watchWithFilter']> | ||||||
|  |     readonly whenever: UnwrapRef<typeof import('@vueuse/core')['whenever']> | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										16
									
								
								fixtures/vitesse/src/components.d.ts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								fixtures/vitesse/src/components.d.ts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | |||||||
|  | // generated by unplugin-vue-components | ||||||
|  | // We suggest you to commit this file into source control | ||||||
|  | // Read more: https://github.com/vuejs/core/pull/3399 | ||||||
|  | import '@vue/runtime-core' | ||||||
|  |  | ||||||
|  | export {} | ||||||
|  |  | ||||||
|  | declare module '@vue/runtime-core' { | ||||||
|  |   export interface GlobalComponents { | ||||||
|  |     Counter: typeof import('./components/Counter.vue')['default'] | ||||||
|  |     Footer: typeof import('./components/Footer.vue')['default'] | ||||||
|  |     README: typeof import('./components/README.md')['default'] | ||||||
|  |     RouterLink: typeof import('vue-router')['RouterLink'] | ||||||
|  |     RouterView: typeof import('vue-router')['RouterView'] | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										19
									
								
								fixtures/vitesse/src/components/Counter.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								fixtures/vitesse/src/components/Counter.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | |||||||
|  | <script setup lang="ts"> | ||||||
|  | const props = defineProps<{ | ||||||
|  |   initial: number | ||||||
|  | }>() | ||||||
|  |  | ||||||
|  | const { count, inc, dec } = useCounter(props.initial) | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <template> | ||||||
|  |   <div> | ||||||
|  |     {{ count }} | ||||||
|  |     <button class="inc" @click="inc()"> | ||||||
|  |       + | ||||||
|  |     </button> | ||||||
|  |     <button class="dec" @click="dec()"> | ||||||
|  |       - | ||||||
|  |     </button> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
							
								
								
									
										33
									
								
								fixtures/vitesse/src/components/Footer.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								fixtures/vitesse/src/components/Footer.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,33 @@ | |||||||
|  | <script setup lang="ts"> | ||||||
|  | const { t, availableLocales, locale } = useI18n() | ||||||
|  |  | ||||||
|  | const toggleLocales = () => { | ||||||
|  |   // change to some real logic | ||||||
|  |   const locales = availableLocales | ||||||
|  |   locale.value = locales[(locales.indexOf(locale.value) + 1) % locales.length] | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <template> | ||||||
|  |   <nav text-xl mt-6> | ||||||
|  |     <RouterLink class="icon-btn mx-2" to="/" :title="t('button.home')"> | ||||||
|  |       <div i-carbon-campsite /> | ||||||
|  |     </RouterLink> | ||||||
|  |  | ||||||
|  |     <button class="icon-btn mx-2 !outline-none" :title="t('button.toggle_dark')" @click="toggleDark()"> | ||||||
|  |       <div i="carbon-sun dark:carbon-moon" /> | ||||||
|  |     </button> | ||||||
|  |  | ||||||
|  |     <a class="icon-btn mx-2" :title="t('button.toggle_langs')" @click="toggleLocales()"> | ||||||
|  |       <div i-carbon-language /> | ||||||
|  |     </a> | ||||||
|  |  | ||||||
|  |     <RouterLink class="icon-btn mx-2" to="/about" :title="t('button.about')"> | ||||||
|  |       <div i-carbon-dicom-overlay /> | ||||||
|  |     </RouterLink> | ||||||
|  |  | ||||||
|  |     <a class="icon-btn mx-2" rel="noreferrer" href="https://github.com/antfu/vitesse" target="_blank" title="GitHub"> | ||||||
|  |       <div i-carbon-logo-github /> | ||||||
|  |     </a> | ||||||
|  |   </nav> | ||||||
|  | </template> | ||||||
							
								
								
									
										10
									
								
								fixtures/vitesse/src/components/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								fixtures/vitesse/src/components/README.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | |||||||
|  | ## Components | ||||||
|  |  | ||||||
|  | Components in this dir will be auto-registered and on-demand, powered by [`unplugin-vue-components`](https://github.com/antfu/unplugin-vue-components). | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ### Icons | ||||||
|  |  | ||||||
|  | You can use icons from almost any icon sets by the power of [Iconify](https://iconify.design/). | ||||||
|  |  | ||||||
|  | It will only bundle the icons you use. Check out [`unplugin-icons`](https://github.com/antfu/unplugin-icons) for more details. | ||||||
							
								
								
									
										4
									
								
								fixtures/vitesse/src/composables/dark.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								fixtures/vitesse/src/composables/dark.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | |||||||
|  | // these APIs are auto-imported from @vueuse/core | ||||||
|  | export const isDark = useDark() | ||||||
|  | export const toggleDark = useToggle(isDark) | ||||||
|  | export const preferredDark = usePreferredDark() | ||||||
							
								
								
									
										18
									
								
								fixtures/vitesse/src/layouts/404.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								fixtures/vitesse/src/layouts/404.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | |||||||
|  | <script setup lang="ts"> | ||||||
|  | const router = useRouter() | ||||||
|  | const { t } = useI18n() | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <template> | ||||||
|  |   <main p="x4 y10" text="center teal-700 dark:gray-200"> | ||||||
|  |     <div text-4xl> | ||||||
|  |       <div i-carbon-warning inline-block /> | ||||||
|  |     </div> | ||||||
|  |     <RouterView /> | ||||||
|  |     <div> | ||||||
|  |       <button btn text-sm m="3 t8" @click="router.back()"> | ||||||
|  |         {{ t('button.back') }} | ||||||
|  |       </button> | ||||||
|  |     </div> | ||||||
|  |   </main> | ||||||
|  | </template> | ||||||
							
								
								
									
										14
									
								
								fixtures/vitesse/src/layouts/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								fixtures/vitesse/src/layouts/README.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | |||||||
|  | ## Layouts | ||||||
|  |  | ||||||
|  | Vue components in this dir are used as layouts. | ||||||
|  |  | ||||||
|  | By default, `default.vue` will be used unless an alternative is specified in the route meta. | ||||||
|  |  | ||||||
|  | With [`vite-plugin-pages`](https://github.com/hannoeru/vite-plugin-pages) and [`vite-plugin-vue-layouts`](https://github.com/JohnCampionJr/vite-plugin-vue-layouts), you can specify the layout in the page's SFCs like this: | ||||||
|  |  | ||||||
|  | ```html | ||||||
|  | <route lang="yaml"> | ||||||
|  | meta: | ||||||
|  |   layout: home | ||||||
|  | </route> | ||||||
|  | ``` | ||||||
							
								
								
									
										9
									
								
								fixtures/vitesse/src/layouts/default.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								fixtures/vitesse/src/layouts/default.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | |||||||
|  | <template> | ||||||
|  |   <main class="px-4 py-10 text-center text-gray-700 dark:text-gray-200"> | ||||||
|  |     <RouterView /> | ||||||
|  |     <Footer /> | ||||||
|  |     <div class="mt-5 mx-auto text-center opacity-75 dark:opacity-50 text-sm"> | ||||||
|  |       [Default Layout] | ||||||
|  |     </div> | ||||||
|  |   </main> | ||||||
|  | </template> | ||||||
							
								
								
									
										9
									
								
								fixtures/vitesse/src/layouts/home.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								fixtures/vitesse/src/layouts/home.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | |||||||
|  | <template> | ||||||
|  |   <main class="px-4 py-10 text-center text-gray-700 dark:text-gray-200"> | ||||||
|  |     <RouterView /> | ||||||
|  |     <Footer /> | ||||||
|  |     <div class="mt-5 mx-auto text-center opacity-75 dark:opacity-50 text-sm"> | ||||||
|  |       [Home Layout] | ||||||
|  |     </div> | ||||||
|  |   </main> | ||||||
|  | </template> | ||||||
							
								
								
									
										22
									
								
								fixtures/vitesse/src/main.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								fixtures/vitesse/src/main.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | |||||||
|  | import { ViteSSG } from 'vite-ssg' | ||||||
|  | import { setupLayouts } from 'virtual:generated-layouts' | ||||||
|  | import App from './App.vue' | ||||||
|  | import type { UserModule } from './types' | ||||||
|  | import generatedRoutes from '~pages' | ||||||
|  |  | ||||||
|  | import '@unocss/reset/tailwind.css' | ||||||
|  | import './styles/main.css' | ||||||
|  | import 'uno.css' | ||||||
|  |  | ||||||
|  | const routes = setupLayouts(generatedRoutes) | ||||||
|  |  | ||||||
|  | // https://github.com/antfu/vite-ssg | ||||||
|  | export const createApp = ViteSSG( | ||||||
|  |   App, | ||||||
|  |   { routes, base: import.meta.env.BASE_URL }, | ||||||
|  |   (ctx) => { | ||||||
|  |     // install all modules under `modules/` | ||||||
|  |     Object.values(import.meta.glob<{ install: UserModule }>('./modules/*.ts', { eager: true })) | ||||||
|  |       .forEach(i => i.install?.(ctx)) | ||||||
|  |   }, | ||||||
|  | ) | ||||||
							
								
								
									
										11
									
								
								fixtures/vitesse/src/modules/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								fixtures/vitesse/src/modules/README.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | ## Modules | ||||||
|  |  | ||||||
|  | A custom user module system. Place a `.ts` file with the following template, it will be installed automatically. | ||||||
|  |  | ||||||
|  | ```ts | ||||||
|  | import { type UserModule } from '~/types' | ||||||
|  |  | ||||||
|  | export const install: UserModule = ({ app, router, isClient }) => { | ||||||
|  |   // do something | ||||||
|  | } | ||||||
|  | ``` | ||||||
							
								
								
									
										25
									
								
								fixtures/vitesse/src/modules/i18n.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								fixtures/vitesse/src/modules/i18n.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | |||||||
|  | import { createI18n } from 'vue-i18n' | ||||||
|  | import { type UserModule } from '~/types' | ||||||
|  |  | ||||||
|  | // Import i18n resources | ||||||
|  | // https://vitejs.dev/guide/features.html#glob-import | ||||||
|  | // | ||||||
|  | // Don't need this? Try vitesse-lite: https://github.com/antfu/vitesse-lite | ||||||
|  | const messages = Object.fromEntries( | ||||||
|  |   Object.entries( | ||||||
|  |     import.meta.glob<{ default: any }>('../../locales/*.y(a)?ml', { eager: true })) | ||||||
|  |     .map(([key, value]) => { | ||||||
|  |       const yaml = key.endsWith('.yaml') | ||||||
|  |       return [key.slice(14, yaml ? -5 : -4), value.default] | ||||||
|  |     }), | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | export const install: UserModule = ({ app }) => { | ||||||
|  |   const i18n = createI18n({ | ||||||
|  |     legacy: false, | ||||||
|  |     locale: 'en', | ||||||
|  |     messages, | ||||||
|  |   }) | ||||||
|  |  | ||||||
|  |   app.use(i18n) | ||||||
|  | } | ||||||
							
								
								
									
										12
									
								
								fixtures/vitesse/src/modules/nprogress.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								fixtures/vitesse/src/modules/nprogress.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | |||||||
|  | import NProgress from 'nprogress' | ||||||
|  | import { type UserModule } from '~/types' | ||||||
|  |  | ||||||
|  | export const install: UserModule = ({ isClient, router }) => { | ||||||
|  |   if (isClient) { | ||||||
|  |     router.beforeEach((to, from) => { | ||||||
|  |       if (to.path !== from.path) | ||||||
|  |         NProgress.start() | ||||||
|  |     }) | ||||||
|  |     router.afterEach(() => { NProgress.done() }) | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										17
									
								
								fixtures/vitesse/src/modules/pinia.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								fixtures/vitesse/src/modules/pinia.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | |||||||
|  | import { createPinia } from 'pinia' | ||||||
|  | import { type UserModule } from '~/types' | ||||||
|  |  | ||||||
|  | // Setup Pinia | ||||||
|  | // https://pinia.vuejs.org/ | ||||||
|  | export const install: UserModule = ({ isClient, initialState, app }) => { | ||||||
|  |   const pinia = createPinia() | ||||||
|  |   app.use(pinia) | ||||||
|  |   // Refer to | ||||||
|  |   // https://github.com/antfu/vite-ssg/blob/main/README.md#state-serialization | ||||||
|  |   // for other serialization strategies. | ||||||
|  |   if (isClient) | ||||||
|  |     pinia.state.value = (initialState.pinia) || {} | ||||||
|  |  | ||||||
|  |   else | ||||||
|  |     initialState.pinia = pinia.state.value | ||||||
|  | } | ||||||
							
								
								
									
										12
									
								
								fixtures/vitesse/src/modules/pwa.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								fixtures/vitesse/src/modules/pwa.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | |||||||
|  | import { type UserModule } from '~/types' | ||||||
|  |  | ||||||
|  | // https://github.com/antfu/vite-plugin-pwa#automatic-reload-when-new-content-available | ||||||
|  | export const install: UserModule = ({ isClient, router }) => { | ||||||
|  |   if (!isClient) | ||||||
|  |     return | ||||||
|  |  | ||||||
|  |   router.isReady().then(async () => { | ||||||
|  |     const { registerSW } = await import('virtual:pwa-register') | ||||||
|  |     registerSW({ immediate: true }) | ||||||
|  |   }) | ||||||
|  | } | ||||||
							
								
								
									
										20
									
								
								fixtures/vitesse/src/pages/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								fixtures/vitesse/src/pages/README.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | |||||||
|  | ## File-based Routing | ||||||
|  |  | ||||||
|  | Routes will be auto-generated for Vue files in this dir with the same file structure. | ||||||
|  | Check out [`vite-plugin-pages`](https://github.com/hannoeru/vite-plugin-pages) for more details. | ||||||
|  |  | ||||||
|  | ### Path Aliasing | ||||||
|  |  | ||||||
|  | `~/` is aliased to `./src/` folder. | ||||||
|  |  | ||||||
|  | For example, instead of having | ||||||
|  |  | ||||||
|  | ```ts | ||||||
|  | import { isDark } from '../../../../composables' | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | now, you can use | ||||||
|  |  | ||||||
|  | ```ts | ||||||
|  | import { isDark } from '~/composables' | ||||||
|  | ``` | ||||||
							
								
								
									
										14
									
								
								fixtures/vitesse/src/pages/[...all].vue
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										14
									
								
								fixtures/vitesse/src/pages/[...all].vue
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,14 @@ | |||||||
|  | <script setup lang="ts"> | ||||||
|  | const { t } = useI18n() | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <template> | ||||||
|  |   <div> | ||||||
|  |     {{ t('not-found') }} | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <route lang="yaml"> | ||||||
|  | meta: | ||||||
|  |   layout: 404 | ||||||
|  | </route> | ||||||
							
								
								
									
										21
									
								
								fixtures/vitesse/src/pages/about.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								fixtures/vitesse/src/pages/about.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | |||||||
|  | --- | ||||||
|  | title: About | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | <div class="text-center"> | ||||||
|  |   <!-- You can use Vue components inside markdown --> | ||||||
|  |   <div i-carbon-dicom-overlay class="text-4xl -mb-6 m-auto" /> | ||||||
|  |   <h3>About</h3> | ||||||
|  | </div> | ||||||
|  |  | ||||||
|  | [Vitesse](https://github.com/antfu/vitesse) is an opinionated [Vite](https://github.com/vitejs/vite) starter template made by [@antfu](https://github.com/antfu) for mocking apps swiftly. With **file-based routing**, **components auto importing**, **markdown support**, I18n, PWA and uses **UnoCSS** for styling and icons. | ||||||
|  |  | ||||||
|  | ```js | ||||||
|  | // syntax highlighting example | ||||||
|  | function vitesse() { | ||||||
|  |   const foo = 'bar' | ||||||
|  |   console.log(foo) | ||||||
|  | } | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | Check out the [GitHub repo](https://github.com/antfu/vitesse) for more details. | ||||||
							
								
								
									
										47
									
								
								fixtures/vitesse/src/pages/hi/[name].vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								fixtures/vitesse/src/pages/hi/[name].vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,47 @@ | |||||||
|  | <script setup lang="ts"> | ||||||
|  | const props = defineProps<{ name: string }>() | ||||||
|  | const router = useRouter() | ||||||
|  | const user = useUserStore() | ||||||
|  | const { t } = useI18n() | ||||||
|  |  | ||||||
|  | watchEffect(() => { | ||||||
|  |   user.setNewName(props.name) | ||||||
|  | }) | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <template> | ||||||
|  |   <div> | ||||||
|  |     <div text-4xl> | ||||||
|  |       <div i-carbon-pedestrian inline-block /> | ||||||
|  |     </div> | ||||||
|  |     <p> | ||||||
|  |       {{ t('intro.hi', { name: props.name }) }} | ||||||
|  |     </p> | ||||||
|  |  | ||||||
|  |     <p text-sm opacity-75> | ||||||
|  |       <em>{{ t('intro.dynamic-route') }}</em> | ||||||
|  |     </p> | ||||||
|  |  | ||||||
|  |     <template v-if="user.otherNames.length"> | ||||||
|  |       <p text-sm mt-4> | ||||||
|  |         <span opacity-75>{{ t('intro.aka') }}:</span> | ||||||
|  |         <ul> | ||||||
|  |           <li v-for="otherName in user.otherNames" :key="otherName"> | ||||||
|  |             <router-link :to="`/hi/${otherName}`" replace> | ||||||
|  |               {{ otherName }} | ||||||
|  |             </router-link> | ||||||
|  |           </li> | ||||||
|  |         </ul> | ||||||
|  |       </p> | ||||||
|  |     </template> | ||||||
|  |  | ||||||
|  |     <div> | ||||||
|  |       <button | ||||||
|  |         btn m="3 t6" text-sm | ||||||
|  |         @click="router.back()" | ||||||
|  |       > | ||||||
|  |         {{ t('button.back') }} | ||||||
|  |       </button> | ||||||
|  |     </div> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
							
								
								
									
										62
									
								
								fixtures/vitesse/src/pages/index.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								fixtures/vitesse/src/pages/index.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,62 @@ | |||||||
|  | <script setup lang="ts"> | ||||||
|  | const user = useUserStore() | ||||||
|  | const name = $ref(user.savedName) | ||||||
|  |  | ||||||
|  | const router = useRouter() | ||||||
|  | const go = () => { | ||||||
|  |   if (name) | ||||||
|  |     router.push(`/hi/${encodeURIComponent(name)}`) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | const { t } = useI18n() | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <template> | ||||||
|  |   <div> | ||||||
|  |     <div text-4xl> | ||||||
|  |       <div i-carbon-campsite inline-block /> | ||||||
|  |     </div> | ||||||
|  |     <p> | ||||||
|  |       <a rel="noreferrer" href="https://github.com/antfu/vitesse" target="_blank"> | ||||||
|  |         Vitesse | ||||||
|  |       </a> | ||||||
|  |     </p> | ||||||
|  |     <p> | ||||||
|  |       <em text-sm opacity-75>{{ t('intro.desc') }}</em> | ||||||
|  |     </p> | ||||||
|  |  | ||||||
|  |     <div py-4 /> | ||||||
|  |  | ||||||
|  |     <input | ||||||
|  |       id="input" | ||||||
|  |       v-model="name" | ||||||
|  |       :placeholder="t('intro.whats-your-name')" | ||||||
|  |       :aria-label="t('intro.whats-your-name')" | ||||||
|  |       type="text" | ||||||
|  |       autocomplete="false" | ||||||
|  |       p="x4 y2" | ||||||
|  |       w="250px" | ||||||
|  |       text="center" | ||||||
|  |       bg="transparent" | ||||||
|  |       border="~ rounded gray-200 dark:gray-700" | ||||||
|  |       outline="none active:none" | ||||||
|  |       @keydown.enter="go" | ||||||
|  |     > | ||||||
|  |     <label class="hidden" for="input">{{ t('intro.whats-your-name') }}</label> | ||||||
|  |  | ||||||
|  |     <div> | ||||||
|  |       <button | ||||||
|  |         btn m-3 text-sm | ||||||
|  |         :disabled="!name" | ||||||
|  |         @click="go" | ||||||
|  |       > | ||||||
|  |         {{ t('button.go') }} | ||||||
|  |       </button> | ||||||
|  |     </div> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <route lang="yaml"> | ||||||
|  | meta: | ||||||
|  |   layout: home | ||||||
|  | </route> | ||||||
							
								
								
									
										16
									
								
								fixtures/vitesse/src/shims.d.ts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								fixtures/vitesse/src/shims.d.ts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | |||||||
|  | declare interface Window { | ||||||
|  |   // extend the window | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // with vite-plugin-vue-markdown, markdown files can be treated as Vue components | ||||||
|  | declare module '*.md' { | ||||||
|  |   import { type DefineComponent } from 'vue' | ||||||
|  |   const component: DefineComponent<{}, {}, any> | ||||||
|  |   export default component | ||||||
|  | } | ||||||
|  |  | ||||||
|  | declare module '*.vue' { | ||||||
|  |   import { type DefineComponent } from 'vue' | ||||||
|  |   const component: DefineComponent<{}, {}, any> | ||||||
|  |   export default component | ||||||
|  | } | ||||||
							
								
								
									
										34
									
								
								fixtures/vitesse/src/store/user.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								fixtures/vitesse/src/store/user.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | |||||||
|  | import { acceptHMRUpdate, defineStore } from 'pinia' | ||||||
|  |  | ||||||
|  | export const useUserStore = defineStore('user', () => { | ||||||
|  |   /** | ||||||
|  |    * Current name of the user. | ||||||
|  |    */ | ||||||
|  |   const savedName = ref('') | ||||||
|  |   const previousNames = ref(new Set<string>()) | ||||||
|  |  | ||||||
|  |   const usedNames = computed(() => Array.from(previousNames.value)) | ||||||
|  |   const otherNames = computed(() => usedNames.value.filter(name => name !== savedName.value)) | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * Changes the current name of the user and saves the one that was used | ||||||
|  |    * before. | ||||||
|  |    * | ||||||
|  |    * @param name - new name to set | ||||||
|  |    */ | ||||||
|  |   function setNewName(name: string) { | ||||||
|  |     if (savedName.value) | ||||||
|  |       previousNames.value.add(savedName.value) | ||||||
|  |  | ||||||
|  |     savedName.value = name | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   return { | ||||||
|  |     setNewName, | ||||||
|  |     otherNames, | ||||||
|  |     savedName, | ||||||
|  |   } | ||||||
|  | }) | ||||||
|  |  | ||||||
|  | if (import.meta.hot) | ||||||
|  |   import.meta.hot.accept(acceptHMRUpdate(useUserStore, import.meta.hot)) | ||||||
							
								
								
									
										29
									
								
								fixtures/vitesse/src/styles/main.css
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										29
									
								
								fixtures/vitesse/src/styles/main.css
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,29 @@ | |||||||
|  | @import './markdown.css'; | ||||||
|  |  | ||||||
|  | html, | ||||||
|  | body, | ||||||
|  | #app { | ||||||
|  |   height: 100%; | ||||||
|  |   margin: 0; | ||||||
|  |   padding: 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | html.dark { | ||||||
|  |   background: #121212; | ||||||
|  |   color-scheme: dark; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #nprogress { | ||||||
|  |   pointer-events: none; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #nprogress .bar { | ||||||
|  |   background: rgb(13,148,136); | ||||||
|  |   opacity: 0.75; | ||||||
|  |   position: fixed; | ||||||
|  |   z-index: 1031; | ||||||
|  |   top: 0; | ||||||
|  |   left: 0; | ||||||
|  |   width: 100%; | ||||||
|  |   height: 2px; | ||||||
|  | } | ||||||
							
								
								
									
										28
									
								
								fixtures/vitesse/src/styles/markdown.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								fixtures/vitesse/src/styles/markdown.css
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,28 @@ | |||||||
|  | .prose pre:not(.shiki) { | ||||||
|  |   padding: 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .prose .shiki { | ||||||
|  |   font-family: 'DM Mono', monospace; | ||||||
|  |   font-size: 1.2em; | ||||||
|  |   line-height: 1.4; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .prose img { | ||||||
|  |   width: 100%; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .shiki-light { | ||||||
|  |   background: #f8f8f8 !important; | ||||||
|  | } | ||||||
|  | .shiki-dark { | ||||||
|  |   background: #0e0e0e !important; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | html.dark .shiki-light { | ||||||
|  |   display: none; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | html:not(.dark) .shiki-dark { | ||||||
|  |   display: none; | ||||||
|  | } | ||||||
							
								
								
									
										3
									
								
								fixtures/vitesse/src/types.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								fixtures/vitesse/src/types.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | |||||||
|  | import { type ViteSSGContext } from 'vite-ssg' | ||||||
|  |  | ||||||
|  | export type UserModule = (ctx: ViteSSGContext) => void | ||||||
| @@ -0,0 +1,3 @@ | |||||||
|  | // Vitest Snapshot v1 | ||||||
|  |  | ||||||
|  | exports[`Counter.vue > should render 1`] = `"<div>10 <button class=\\"inc\\"> + </button><button class=\\"dec\\"> - </button></div>"`; | ||||||
							
								
								
									
										7
									
								
								fixtures/vitesse/test/basic.test.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								fixtures/vitesse/test/basic.test.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | |||||||
|  | import { describe, expect, it } from 'vitest' | ||||||
|  |  | ||||||
|  | describe('tests', () => { | ||||||
|  |   it('should works', () => { | ||||||
|  |     expect(1 + 1).toEqual(2) | ||||||
|  |   }) | ||||||
|  | }) | ||||||
							
								
								
									
										28
									
								
								fixtures/vitesse/test/component.test.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								fixtures/vitesse/test/component.test.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,28 @@ | |||||||
|  | import { mount } from '@vue/test-utils' | ||||||
|  | import { describe, expect, it } from 'vitest' | ||||||
|  | import Counter from '../src/components/Counter.vue' | ||||||
|  |  | ||||||
|  | describe('Counter.vue', () => { | ||||||
|  |   it('should render', () => { | ||||||
|  |     const wrapper = mount(Counter, { props: { initial: 10 } }) | ||||||
|  |     expect(wrapper.text()).toContain('10') | ||||||
|  |     expect(wrapper.html()).toMatchSnapshot() | ||||||
|  |   }) | ||||||
|  |  | ||||||
|  |   it('should be interactive', async () => { | ||||||
|  |     const wrapper = mount(Counter, { props: { initial: 0 } }) | ||||||
|  |     expect(wrapper.text()).toContain('0') | ||||||
|  |  | ||||||
|  |     expect(wrapper.find('.inc').exists()).toBe(true) | ||||||
|  |  | ||||||
|  |     expect(wrapper.find('.dec').exists()).toBe(true) | ||||||
|  |  | ||||||
|  |     await wrapper.get('.inc').trigger('click') | ||||||
|  |  | ||||||
|  |     expect(wrapper.text()).toContain('1') | ||||||
|  |  | ||||||
|  |     await wrapper.get('.dec').trigger('click') | ||||||
|  |  | ||||||
|  |     expect(wrapper.text()).toContain('0') | ||||||
|  |   }) | ||||||
|  | }) | ||||||
							
								
								
									
										38
									
								
								fixtures/vitesse/unocss.config.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								fixtures/vitesse/unocss.config.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,38 @@ | |||||||
|  | import { | ||||||
|  |   defineConfig, | ||||||
|  |   presetAttributify, | ||||||
|  |   presetIcons, | ||||||
|  |   presetTypography, | ||||||
|  |   presetUno, | ||||||
|  |   presetWebFonts, | ||||||
|  |   transformerDirectives, | ||||||
|  |   transformerVariantGroup, | ||||||
|  | } from 'unocss' | ||||||
|  |  | ||||||
|  | export default defineConfig({ | ||||||
|  |   shortcuts: [ | ||||||
|  |     ['btn', 'px-4 py-1 rounded inline-block bg-teal-700 text-white cursor-pointer hover:bg-teal-800 disabled:cursor-default disabled:bg-gray-600 disabled:opacity-50'], | ||||||
|  |     ['icon-btn', 'inline-block cursor-pointer select-none opacity-75 transition duration-200 ease-in-out hover:opacity-100 hover:text-teal-600'], | ||||||
|  |   ], | ||||||
|  |   presets: [ | ||||||
|  |     presetUno(), | ||||||
|  |     presetAttributify(), | ||||||
|  |     presetIcons({ | ||||||
|  |       scale: 1.2, | ||||||
|  |       warn: true, | ||||||
|  |     }), | ||||||
|  |     presetTypography(), | ||||||
|  |     presetWebFonts({ | ||||||
|  |       fonts: { | ||||||
|  |         sans: 'DM Sans', | ||||||
|  |         serif: 'DM Serif Display', | ||||||
|  |         mono: 'DM Mono', | ||||||
|  |       }, | ||||||
|  |     }), | ||||||
|  |   ], | ||||||
|  |   transformers: [ | ||||||
|  |     transformerDirectives(), | ||||||
|  |     transformerVariantGroup(), | ||||||
|  |   ], | ||||||
|  |   safelist: 'prose prose-sm m-auto text-left'.split(' '), | ||||||
|  | }) | ||||||
							
								
								
									
										153
									
								
								fixtures/vitesse/vite.config.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										153
									
								
								fixtures/vitesse/vite.config.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,153 @@ | |||||||
|  | import path from 'path' | ||||||
|  | import { defineConfig } from 'vite' | ||||||
|  | import Vue from '@vitejs/plugin-vue' | ||||||
|  | import Pages from 'vite-plugin-pages' | ||||||
|  | import generateSitemap from 'vite-ssg-sitemap' | ||||||
|  | import Layouts from 'vite-plugin-vue-layouts' | ||||||
|  | import Components from 'unplugin-vue-components/vite' | ||||||
|  | import AutoImport from 'unplugin-auto-import/vite' | ||||||
|  | import Markdown from 'vite-plugin-vue-markdown' | ||||||
|  | import { VitePWA } from 'vite-plugin-pwa' | ||||||
|  | import VueI18n from '@intlify/vite-plugin-vue-i18n' | ||||||
|  | import Inspect from 'vite-plugin-inspect' | ||||||
|  | import LinkAttributes from 'markdown-it-link-attributes' | ||||||
|  | import Unocss from 'unocss/vite' | ||||||
|  | import Shiki from 'markdown-it-shiki' | ||||||
|  |  | ||||||
|  | export default defineConfig({ | ||||||
|  |   resolve: { | ||||||
|  |     alias: { | ||||||
|  |       '~/': `${path.resolve(__dirname, 'src')}/`, | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  |  | ||||||
|  |   plugins: [ | ||||||
|  |     Vue({ | ||||||
|  |       include: [/\.vue$/, /\.md$/], | ||||||
|  |       reactivityTransform: true, | ||||||
|  |     }), | ||||||
|  |  | ||||||
|  |     // https://github.com/hannoeru/vite-plugin-pages | ||||||
|  |     Pages({ | ||||||
|  |       extensions: ['vue', 'md'], | ||||||
|  |     }), | ||||||
|  |  | ||||||
|  |     // https://github.com/JohnCampionJr/vite-plugin-vue-layouts | ||||||
|  |     Layouts(), | ||||||
|  |  | ||||||
|  |     // https://github.com/antfu/unplugin-auto-import | ||||||
|  |     AutoImport({ | ||||||
|  |       imports: [ | ||||||
|  |         'vue', | ||||||
|  |         'vue-router', | ||||||
|  |         'vue-i18n', | ||||||
|  |         'vue/macros', | ||||||
|  |         '@vueuse/head', | ||||||
|  |         '@vueuse/core', | ||||||
|  |       ], | ||||||
|  |       dts: 'src/auto-imports.d.ts', | ||||||
|  |       dirs: [ | ||||||
|  |         'src/composables', | ||||||
|  |         'src/store', | ||||||
|  |       ], | ||||||
|  |       vueTemplate: true, | ||||||
|  |     }), | ||||||
|  |  | ||||||
|  |     // https://github.com/antfu/unplugin-vue-components | ||||||
|  |     Components({ | ||||||
|  |       // allow auto load markdown components under `./src/components/` | ||||||
|  |       extensions: ['vue', 'md'], | ||||||
|  |       // allow auto import and register components used in markdown | ||||||
|  |       include: [/\.vue$/, /\.vue\?vue/, /\.md$/], | ||||||
|  |       dts: 'src/components.d.ts', | ||||||
|  |     }), | ||||||
|  |  | ||||||
|  |     // https://github.com/antfu/unocss | ||||||
|  |     // see unocss.config.ts for config | ||||||
|  |     Unocss(), | ||||||
|  |  | ||||||
|  |     // https://github.com/antfu/vite-plugin-vue-markdown | ||||||
|  |     // Don't need this? Try vitesse-lite: https://github.com/antfu/vitesse-lite | ||||||
|  |     Markdown({ | ||||||
|  |       wrapperClasses: 'prose prose-sm m-auto text-left', | ||||||
|  |       headEnabled: true, | ||||||
|  |       markdownItSetup(md) { | ||||||
|  |         // https://prismjs.com/ | ||||||
|  |         md.use(Shiki, { | ||||||
|  |           theme: { | ||||||
|  |             light: 'vitesse-light', | ||||||
|  |             dark: 'vitesse-dark', | ||||||
|  |           }, | ||||||
|  |         }) | ||||||
|  |         md.use(LinkAttributes, { | ||||||
|  |           matcher: (link: string) => /^https?:\/\//.test(link), | ||||||
|  |           attrs: { | ||||||
|  |             target: '_blank', | ||||||
|  |             rel: 'noopener', | ||||||
|  |           }, | ||||||
|  |         }) | ||||||
|  |       }, | ||||||
|  |     }), | ||||||
|  |  | ||||||
|  |     // https://github.com/antfu/vite-plugin-pwa | ||||||
|  |     VitePWA({ | ||||||
|  |       registerType: 'autoUpdate', | ||||||
|  |       includeAssets: ['favicon.svg', 'safari-pinned-tab.svg'], | ||||||
|  |       manifest: { | ||||||
|  |         name: 'Vitesse', | ||||||
|  |         short_name: 'Vitesse', | ||||||
|  |         theme_color: '#ffffff', | ||||||
|  |         icons: [ | ||||||
|  |           { | ||||||
|  |             src: '/pwa-192x192.png', | ||||||
|  |             sizes: '192x192', | ||||||
|  |             type: 'image/png', | ||||||
|  |           }, | ||||||
|  |           { | ||||||
|  |             src: '/pwa-512x512.png', | ||||||
|  |             sizes: '512x512', | ||||||
|  |             type: 'image/png', | ||||||
|  |           }, | ||||||
|  |           { | ||||||
|  |             src: '/pwa-512x512.png', | ||||||
|  |             sizes: '512x512', | ||||||
|  |             type: 'image/png', | ||||||
|  |             purpose: 'any maskable', | ||||||
|  |           }, | ||||||
|  |         ], | ||||||
|  |       }, | ||||||
|  |     }), | ||||||
|  |  | ||||||
|  |     // https://github.com/intlify/bundle-tools/tree/main/packages/vite-plugin-vue-i18n | ||||||
|  |     VueI18n({ | ||||||
|  |       runtimeOnly: true, | ||||||
|  |       compositionOnly: true, | ||||||
|  |       include: [path.resolve(__dirname, 'locales/**')], | ||||||
|  |     }), | ||||||
|  |  | ||||||
|  |     // https://github.com/antfu/vite-plugin-inspect | ||||||
|  |     // Visit http://localhost:3333/__inspect/ to see the inspector | ||||||
|  |     Inspect(), | ||||||
|  |   ], | ||||||
|  |  | ||||||
|  |   // https://github.com/vitest-dev/vitest | ||||||
|  |   test: { | ||||||
|  |     include: ['test/**/*.test.ts'], | ||||||
|  |     environment: 'jsdom', | ||||||
|  |     deps: { | ||||||
|  |       inline: ['@vue', '@vueuse', 'vue-demi'], | ||||||
|  |     }, | ||||||
|  |   }, | ||||||
|  |  | ||||||
|  |   // https://github.com/antfu/vite-ssg | ||||||
|  |   ssgOptions: { | ||||||
|  |     script: 'async', | ||||||
|  |     formatting: 'minify', | ||||||
|  |     onFinished() { generateSitemap() }, | ||||||
|  |   }, | ||||||
|  |  | ||||||
|  |   ssr: { | ||||||
|  |     // TODO: workaround until they support native ESM | ||||||
|  |     noExternal: ['workbox-window', /vue-i18n/], | ||||||
|  |   }, | ||||||
|  | }) | ||||||
							
								
								
									
										13
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								package.json
									
									
									
									
									
								
							| @@ -1,19 +1,22 @@ | |||||||
| { | { | ||||||
|   "name": "@antfu/eslint-config-monorepo", |   "name": "@antfu/eslint-config-monorepo", | ||||||
|   "version": "0.22.0", |   "version": "0.28.0", | ||||||
|   "private": true, |   "private": true, | ||||||
|   "license": "MIT", |   "packageManager": "pnpm@7.1.0", | ||||||
|   "author": "Anthony Fu <anthonyfu117@hotmail.com> (https://github.com/antfu/)", |   "author": "Anthony Fu <anthonyfu117@hotmail.com> (https://github.com/antfu/)", | ||||||
|  |   "license": "MIT", | ||||||
|   "scripts": { |   "scripts": { | ||||||
|     "lint": "eslint .", |     "lint": "eslint .", | ||||||
|  |     "test": "pnpm -r run test", | ||||||
|     "prepare": "pnpm -r run stub", |     "prepare": "pnpm -r run stub", | ||||||
|     "release": "bumpp package.json packages/*/package.json --commit --push --tag && pnpm -r publish --access public" |     "release": "bumpp package.json packages/*/package.json --commit --push --tag && pnpm -r publish --access public" | ||||||
|   }, |   }, | ||||||
|   "devDependencies": { |   "devDependencies": { | ||||||
|     "@antfu/eslint-config": "*", |     "@antfu/eslint-config": "*", | ||||||
|     "bumpp": "^7.1.1", |     "bumpp": "^8.2.1", | ||||||
|     "eslint": "^8.14.0", |     "eslint": "^8.23.0", | ||||||
|     "eslint-plugin-antfu": "workspace:*", |     "eslint-plugin-antfu": "workspace:*", | ||||||
|     "typescript": "^4.6.3" |     "rimraf": "^3.0.2", | ||||||
|  |     "typescript": "^4.8.2" | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,6 +1,5 @@ | |||||||
| module.exports = { | module.exports = { | ||||||
|   extends: [ |   extends: [ | ||||||
|     '@antfu/eslint-config-react', |  | ||||||
|     '@antfu/eslint-config-vue', |     '@antfu/eslint-config-vue', | ||||||
|   ], |   ], | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,10 +1,13 @@ | |||||||
| { | { | ||||||
|   "name": "@antfu/eslint-config", |   "name": "@antfu/eslint-config", | ||||||
|   "version": "0.22.0", |   "version": "0.28.0", | ||||||
|   "description": "", |   "description": "Anthony's ESLint config", | ||||||
|   "keywords": [], |  | ||||||
|   "license": "MIT", |  | ||||||
|   "author": "Anthony Fu <anthonyfu117@hotmail.com> (https://github.com/antfu/)", |   "author": "Anthony Fu <anthonyfu117@hotmail.com> (https://github.com/antfu/)", | ||||||
|  |   "license": "MIT", | ||||||
|  |   "homepage": "https://github.com/antfu/eslint-config", | ||||||
|  |   "keywords": [ | ||||||
|  |     "eslint-config" | ||||||
|  |   ], | ||||||
|   "main": "index.js", |   "main": "index.js", | ||||||
|   "files": [ |   "files": [ | ||||||
|     "index.js" |     "index.js" | ||||||
| @@ -13,26 +16,22 @@ | |||||||
|     "eslint": ">=7.4.0" |     "eslint": ">=7.4.0" | ||||||
|   }, |   }, | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|     "@antfu/eslint-config-react": "workspace:*", |  | ||||||
|     "@antfu/eslint-config-vue": "workspace:*", |     "@antfu/eslint-config-vue": "workspace:*", | ||||||
|     "@typescript-eslint/eslint-plugin": "^5.20.0", |     "@typescript-eslint/eslint-plugin": "^5.36.1", | ||||||
|     "@typescript-eslint/parser": "^5.20.0", |     "@typescript-eslint/parser": "^5.36.1", | ||||||
|     "eslint-plugin-eslint-comments": "^3.2.0", |     "eslint-plugin-eslint-comments": "^3.2.0", | ||||||
|     "eslint-plugin-html": "^6.2.0", |     "eslint-plugin-html": "^7.1.0", | ||||||
|     "eslint-plugin-import": "^2.26.0", |     "eslint-plugin-import": "^2.26.0", | ||||||
|     "eslint-plugin-jsonc": "^2.2.1", |     "eslint-plugin-jsonc": "^2.4.0", | ||||||
|     "eslint-plugin-n": "^15.1.0", |     "eslint-plugin-n": "^15.2.5", | ||||||
|     "eslint-plugin-promise": "^6.0.0", |     "eslint-plugin-promise": "^6.0.1", | ||||||
|     "eslint-plugin-unicorn": "^42.0.0", |     "eslint-plugin-unicorn": "^43.0.2", | ||||||
|     "eslint-plugin-vue": "^8.7.1", |     "eslint-plugin-vue": "^9.4.0", | ||||||
|     "eslint-plugin-yml": "^0.14.0", |     "eslint-plugin-yml": "^1.1.0", | ||||||
|     "jsonc-eslint-parser": "^2.1.0", |     "jsonc-eslint-parser": "^2.1.0", | ||||||
|     "yaml-eslint-parser": "^0.5.0" |     "yaml-eslint-parser": "^1.1.0" | ||||||
|   }, |   }, | ||||||
|   "devDependencies": { |   "devDependencies": { | ||||||
|     "eslint": "^8.14.0" |     "eslint": "^8.23.0" | ||||||
|   }, |  | ||||||
|   "publishConfig": { |  | ||||||
|     "access": "public" |  | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -4,6 +4,7 @@ module.exports = { | |||||||
|     browser: true, |     browser: true, | ||||||
|     node: true, |     node: true, | ||||||
|   }, |   }, | ||||||
|  |   reportUnusedDisableDirectives: true, | ||||||
|   extends: [ |   extends: [ | ||||||
|     './standard', |     './standard', | ||||||
|     'plugin:import/recommended', |     'plugin:import/recommended', | ||||||
| @@ -14,6 +15,7 @@ module.exports = { | |||||||
|   ], |   ], | ||||||
|   ignorePatterns: [ |   ignorePatterns: [ | ||||||
|     '*.min.*', |     '*.min.*', | ||||||
|  |     '*.d.ts', | ||||||
|     'CHANGELOG.md', |     'CHANGELOG.md', | ||||||
|     'dist', |     'dist', | ||||||
|     'LICENSE*', |     'LICENSE*', | ||||||
| @@ -21,7 +23,7 @@ module.exports = { | |||||||
|     'coverage', |     'coverage', | ||||||
|     'public', |     'public', | ||||||
|     'temp', |     'temp', | ||||||
|     'packages-lock.json', |     'package-lock.json', | ||||||
|     'pnpm-lock.yaml', |     'pnpm-lock.yaml', | ||||||
|     'yarn.lock', |     'yarn.lock', | ||||||
|     '__snapshots__', |     '__snapshots__', | ||||||
| @@ -33,6 +35,7 @@ module.exports = { | |||||||
|     'html', |     'html', | ||||||
|     'unicorn', |     'unicorn', | ||||||
|     'antfu', |     'antfu', | ||||||
|  |     'no-only-tests', | ||||||
|   ], |   ], | ||||||
|   settings: { |   settings: { | ||||||
|     'import/resolver': { |     'import/resolver': { | ||||||
| @@ -44,9 +47,15 @@ module.exports = { | |||||||
|       files: ['*.json', '*.json5'], |       files: ['*.json', '*.json5'], | ||||||
|       parser: 'jsonc-eslint-parser', |       parser: 'jsonc-eslint-parser', | ||||||
|       rules: { |       rules: { | ||||||
|         'jsonc/quotes': ['error', 'double'], |         'jsonc/array-bracket-spacing': ['error', 'never'], | ||||||
|         'jsonc/quote-props': ['error', 'always'], |  | ||||||
|         'jsonc/comma-dangle': ['error', 'never'], |         'jsonc/comma-dangle': ['error', 'never'], | ||||||
|  |         'jsonc/comma-style': ['error', 'last'], | ||||||
|  |         'jsonc/indent': ['error', 2], | ||||||
|  |         'jsonc/key-spacing': ['error', { beforeColon: false, afterColon: true }], | ||||||
|  |         'jsonc/no-octal-escape': 'error', | ||||||
|  |         'jsonc/object-curly-newline': ['error', { multiline: true, consistent: true }], | ||||||
|  |         'jsonc/object-curly-spacing': ['error', 'always'], | ||||||
|  |         'jsonc/object-property-newline': ['error', { allowMultiplePropertiesPerLine: true }], | ||||||
|       }, |       }, | ||||||
|     }, |     }, | ||||||
|     { |     { | ||||||
| @@ -65,33 +74,47 @@ module.exports = { | |||||||
|           { |           { | ||||||
|             pathPattern: '^$', |             pathPattern: '^$', | ||||||
|             order: [ |             order: [ | ||||||
|  |               'publisher', | ||||||
|               'name', |               'name', | ||||||
|  |               'displayName', | ||||||
|               'type', |               'type', | ||||||
|               'version', |               'version', | ||||||
|               'private', |               'private', | ||||||
|               'packageManager', |               'packageManager', | ||||||
|               'description', |               'description', | ||||||
|               'keywords', |  | ||||||
|               'license', |  | ||||||
|               'author', |               'author', | ||||||
|               'repository', |               'license', | ||||||
|               'funding', |               'funding', | ||||||
|  |               'homepage', | ||||||
|  |               'repository', | ||||||
|  |               'bugs', | ||||||
|  |               'keywords', | ||||||
|  |               'categories', | ||||||
|  |               'sideEffects', | ||||||
|  |               'exports', | ||||||
|               'main', |               'main', | ||||||
|               'module', |               'module', | ||||||
|               'types', |  | ||||||
|               'unpkg', |               'unpkg', | ||||||
|               'jsdelivr', |               'jsdelivr', | ||||||
|               'exports', |               'types', | ||||||
|               'files', |               'typesVersions', | ||||||
|               'bin', |               'bin', | ||||||
|               'sideEffects', |               'icon', | ||||||
|  |               'files', | ||||||
|  |               'engines', | ||||||
|  |               'activationEvents', | ||||||
|  |               'contributes', | ||||||
|               'scripts', |               'scripts', | ||||||
|               'peerDependencies', |               'peerDependencies', | ||||||
|               'peerDependenciesMeta', |               'peerDependenciesMeta', | ||||||
|               'dependencies', |               'dependencies', | ||||||
|               'optionalDependencies', |               'optionalDependencies', | ||||||
|               'devDependencies', |               'devDependencies', | ||||||
|  |               'pnpm', | ||||||
|  |               'overrides', | ||||||
|  |               'resolutions', | ||||||
|               'husky', |               'husky', | ||||||
|  |               'simple-git-hooks', | ||||||
|               'lint-staged', |               'lint-staged', | ||||||
|               'eslintConfig', |               'eslintConfig', | ||||||
|             ], |             ], | ||||||
| @@ -100,6 +123,14 @@ module.exports = { | |||||||
|             pathPattern: '^(?:dev|peer|optional|bundled)?[Dd]ependencies$', |             pathPattern: '^(?:dev|peer|optional|bundled)?[Dd]ependencies$', | ||||||
|             order: { type: 'asc' }, |             order: { type: 'asc' }, | ||||||
|           }, |           }, | ||||||
|  |           { | ||||||
|  |             pathPattern: '^exports.*$', | ||||||
|  |             order: [ | ||||||
|  |               'types', | ||||||
|  |               'require', | ||||||
|  |               'import', | ||||||
|  |             ], | ||||||
|  |           }, | ||||||
|         ], |         ], | ||||||
|       }, |       }, | ||||||
|     }, |     }, | ||||||
| @@ -125,6 +156,7 @@ module.exports = { | |||||||
|       files: ['*.test.ts', '*.test.js', '*.spec.ts', '*.spec.js'], |       files: ['*.test.ts', '*.test.js', '*.spec.ts', '*.spec.js'], | ||||||
|       rules: { |       rules: { | ||||||
|         'no-unused-expressions': 'off', |         'no-unused-expressions': 'off', | ||||||
|  |         'no-only-tests/no-only-tests': 'error', | ||||||
|       }, |       }, | ||||||
|     }, |     }, | ||||||
|     { |     { | ||||||
| @@ -217,6 +249,7 @@ module.exports = { | |||||||
|         avoidQuotes: true, |         avoidQuotes: true, | ||||||
|       }, |       }, | ||||||
|     ], |     ], | ||||||
|  |     'prefer-exponentiation-operator': 'error', | ||||||
|     'prefer-rest-params': 'error', |     'prefer-rest-params': 'error', | ||||||
|     'prefer-spread': 'error', |     'prefer-spread': 'error', | ||||||
|     'prefer-template': 'error', |     'prefer-template': 'error', | ||||||
| @@ -259,19 +292,17 @@ module.exports = { | |||||||
|     // Uppercase regex escapes |     // Uppercase regex escapes | ||||||
|     'unicorn/escape-case': 'error', |     'unicorn/escape-case': 'error', | ||||||
|     // Array.isArray instead of instanceof |     // Array.isArray instead of instanceof | ||||||
|     'unicorn/no-array-instanceof': 'error', |     'unicorn/no-instanceof-array': 'error', | ||||||
|     // Prevent deprecated `new Buffer()` |     // Prevent deprecated `new Buffer()` | ||||||
|     'unicorn/no-new-buffer': 'error', |     'unicorn/no-new-buffer': 'error', | ||||||
|     // Keep regex literals safe! |     // Keep regex literals safe! | ||||||
|     'unicorn/no-unsafe-regex': 'off', |     'unicorn/no-unsafe-regex': 'off', | ||||||
|     // Lowercase number formatting for octal, hex, binary (0x1'error' instead of 0X1'error') |     // Lowercase number formatting for octal, hex, binary (0x1'error' instead of 0X1'error') | ||||||
|     'unicorn/number-literal-case': 'error', |     'unicorn/number-literal-case': 'error', | ||||||
|     // ** instead of Math.pow() |  | ||||||
|     'unicorn/prefer-exponentiation-operator': 'error', |  | ||||||
|     // includes over indexOf when checking for existence |     // includes over indexOf when checking for existence | ||||||
|     'unicorn/prefer-includes': 'error', |     'unicorn/prefer-includes': 'error', | ||||||
|     // String methods startsWith/endsWith instead of more complicated stuff |     // String methods startsWith/endsWith instead of more complicated stuff | ||||||
|     'unicorn/prefer-starts-ends-with': 'error', |     'unicorn/prefer-string-starts-ends-with': 'error', | ||||||
|     // textContent instead of innerText |     // textContent instead of innerText | ||||||
|     'unicorn/prefer-text-content': 'error', |     'unicorn/prefer-text-content': 'error', | ||||||
|     // Enforce throwing type error when throwing error while checking typeof |     // Enforce throwing type error when throwing error while checking typeof | ||||||
| @@ -282,6 +313,8 @@ module.exports = { | |||||||
|     'no-use-before-define': ['error', { functions: false, classes: false, variables: true }], |     'no-use-before-define': ['error', { functions: false, classes: false, variables: true }], | ||||||
|     'eslint-comments/disable-enable-pair': 'off', |     'eslint-comments/disable-enable-pair': 'off', | ||||||
|     'import/no-named-as-default-member': 'off', |     'import/no-named-as-default-member': 'off', | ||||||
|  |     'import/no-named-as-default': 'off', | ||||||
|  |     'import/namespace': 'off', | ||||||
|     'n/no-callback-literal': 'off', |     'n/no-callback-literal': 'off', | ||||||
|  |  | ||||||
|     'sort-imports': [ |     'sort-imports': [ | ||||||
|   | |||||||
| @@ -1,10 +1,13 @@ | |||||||
| { | { | ||||||
|   "name": "@antfu/eslint-config-basic", |   "name": "@antfu/eslint-config-basic", | ||||||
|   "version": "0.22.0", |   "version": "0.28.0", | ||||||
|   "description": "", |   "description": "", | ||||||
|   "keywords": [], |  | ||||||
|   "license": "MIT", |  | ||||||
|   "author": "Anthony Fu <anthonyfu117@hotmail.com> (https://github.com/antfu/)", |   "author": "Anthony Fu <anthonyfu117@hotmail.com> (https://github.com/antfu/)", | ||||||
|  |   "license": "MIT", | ||||||
|  |   "homepage": "https://github.com/antfu/eslint-config", | ||||||
|  |   "keywords": [ | ||||||
|  |     "eslint-config" | ||||||
|  |   ], | ||||||
|   "main": "index.js", |   "main": "index.js", | ||||||
|   "files": [ |   "files": [ | ||||||
|     "*.js" |     "*.js" | ||||||
| @@ -18,21 +21,19 @@ | |||||||
|   "dependencies": { |   "dependencies": { | ||||||
|     "eslint-plugin-antfu": "workspace:*", |     "eslint-plugin-antfu": "workspace:*", | ||||||
|     "eslint-plugin-eslint-comments": "^3.2.0", |     "eslint-plugin-eslint-comments": "^3.2.0", | ||||||
|     "eslint-plugin-html": "^6.2.0", |     "eslint-plugin-html": "^7.1.0", | ||||||
|     "eslint-plugin-import": "^2.26.0", |     "eslint-plugin-import": "^2.26.0", | ||||||
|     "eslint-plugin-jsonc": "^2.2.1", |     "eslint-plugin-jsonc": "^2.4.0", | ||||||
|     "eslint-plugin-markdown": "^2.2.1", |     "eslint-plugin-markdown": "^3.0.0", | ||||||
|     "eslint-plugin-n": "^15.1.0", |     "eslint-plugin-n": "^15.2.5", | ||||||
|     "eslint-plugin-promise": "^6.0.0", |     "eslint-plugin-no-only-tests": "^3.1.0", | ||||||
|     "eslint-plugin-unicorn": "^42.0.0", |     "eslint-plugin-promise": "^6.0.1", | ||||||
|     "eslint-plugin-yml": "^0.14.0", |     "eslint-plugin-unicorn": "^43.0.2", | ||||||
|  |     "eslint-plugin-yml": "^1.1.0", | ||||||
|     "jsonc-eslint-parser": "^2.1.0", |     "jsonc-eslint-parser": "^2.1.0", | ||||||
|     "yaml-eslint-parser": "^0.5.0" |     "yaml-eslint-parser": "^1.1.0" | ||||||
|   }, |   }, | ||||||
|   "devDependencies": { |   "devDependencies": { | ||||||
|     "eslint": "^8.14.0" |     "eslint": "^8.23.0" | ||||||
|   }, |  | ||||||
|   "publishConfig": { |  | ||||||
|     "access": "public" |  | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,17 +1,11 @@ | |||||||
| { | { | ||||||
|   "name": "eslint-plugin-antfu", |   "name": "eslint-plugin-antfu", | ||||||
|   "version": "0.22.0", |   "version": "0.28.0", | ||||||
|   "license": "MIT", |   "license": "MIT", | ||||||
|  |   "homepage": "https://github.com/antfu/eslint-config", | ||||||
|   "main": "./dist/index.cjs", |   "main": "./dist/index.cjs", | ||||||
|   "module": "./dist/index.mjs", |   "module": "./dist/index.mjs", | ||||||
|   "types": "./dist/index.d.ts", |   "types": "./dist/index.d.ts", | ||||||
|   "exports": { |  | ||||||
|     ".": { |  | ||||||
|       "require": "./dist/index.cjs", |  | ||||||
|       "import": "./dist/index.mjs", |  | ||||||
|       "types": "./dist/index.d.ts" |  | ||||||
|     } |  | ||||||
|   }, |  | ||||||
|   "files": [ |   "files": [ | ||||||
|     "dist" |     "dist" | ||||||
|   ], |   ], | ||||||
| @@ -22,10 +16,10 @@ | |||||||
|     "prepublishOnly": "nr build" |     "prepublishOnly": "nr build" | ||||||
|   }, |   }, | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|     "@typescript-eslint/utils": "^5.20.0" |     "@typescript-eslint/utils": "^5.36.1" | ||||||
|   }, |   }, | ||||||
|   "devDependencies": { |   "devDependencies": { | ||||||
|     "unbuild": "^0.7.4", |     "unbuild": "^0.8.10", | ||||||
|     "vitest": "^0.9.4" |     "vitest": "^0.22.1" | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,6 +1,7 @@ | |||||||
| module.exports = { | module.exports = { | ||||||
|   extends: [ |   extends: [ | ||||||
|     'plugin:react/recommended', |     'plugin:react/recommended', | ||||||
|  |     'plugin:react-hooks/recommended', | ||||||
|     '@antfu/eslint-config-ts', |     '@antfu/eslint-config-ts', | ||||||
|   ], |   ], | ||||||
|   settings: { |   settings: { | ||||||
|   | |||||||
| @@ -1,10 +1,13 @@ | |||||||
| { | { | ||||||
|   "name": "@antfu/eslint-config-react", |   "name": "@antfu/eslint-config-react", | ||||||
|   "version": "0.22.0", |   "version": "0.28.0", | ||||||
|   "description": "", |   "description": "", | ||||||
|   "keywords": [], |  | ||||||
|   "license": "MIT", |  | ||||||
|   "author": "Anthony Fu <anthonyfu117@hotmail.com> (https://github.com/antfu/)", |   "author": "Anthony Fu <anthonyfu117@hotmail.com> (https://github.com/antfu/)", | ||||||
|  |   "license": "MIT", | ||||||
|  |   "homepage": "https://github.com/antfu/eslint-config", | ||||||
|  |   "keywords": [ | ||||||
|  |     "eslint-config" | ||||||
|  |   ], | ||||||
|   "main": "index.js", |   "main": "index.js", | ||||||
|   "files": [ |   "files": [ | ||||||
|     "index.js" |     "index.js" | ||||||
| @@ -15,16 +18,14 @@ | |||||||
|   "peerDependencies": { |   "peerDependencies": { | ||||||
|     "eslint": ">=7.4.0" |     "eslint": ">=7.4.0" | ||||||
|   }, |   }, | ||||||
|   "publishConfig": { |  | ||||||
|     "access": "public" |  | ||||||
|   }, |  | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|     "@antfu/eslint-config-ts": "workspace:*", |     "@antfu/eslint-config-ts": "workspace:*", | ||||||
|     "eslint-plugin-react": "^7.29.4" |     "eslint-plugin-react": "^7.31.1", | ||||||
|  |     "eslint-plugin-react-hooks": "^4.6.0" | ||||||
|   }, |   }, | ||||||
|   "devDependencies": { |   "devDependencies": { | ||||||
|     "eslint": "^8.14.0", |     "eslint": "^8.23.0", | ||||||
|     "react": "^18.0.0", |     "react": "^18.2.0", | ||||||
|     "typescript": "^4.6.3" |     "typescript": "^4.8.2" | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,4 +1,3 @@ | |||||||
| // eslint-disable-next-line @typescript-eslint/no-var-requires |  | ||||||
| const basic = require('@antfu/eslint-config-basic') | const basic = require('@antfu/eslint-config-basic') | ||||||
|  |  | ||||||
| module.exports = { | module.exports = { | ||||||
| @@ -22,7 +21,6 @@ module.exports = { | |||||||
|     '@typescript-eslint/type-annotation-spacing': ['error', {}], |     '@typescript-eslint/type-annotation-spacing': ['error', {}], | ||||||
|     '@typescript-eslint/consistent-type-imports': ['error', { prefer: 'type-imports', disallowTypeAnnotations: false }], |     '@typescript-eslint/consistent-type-imports': ['error', { prefer: 'type-imports', disallowTypeAnnotations: false }], | ||||||
|     '@typescript-eslint/consistent-type-definitions': ['error', 'interface'], |     '@typescript-eslint/consistent-type-definitions': ['error', 'interface'], | ||||||
|     '@typescript-eslint/consistent-indexed-object-style': ['error', 'record'], |  | ||||||
|     '@typescript-eslint/prefer-ts-expect-error': 'error', |     '@typescript-eslint/prefer-ts-expect-error': 'error', | ||||||
|  |  | ||||||
|     // Override JS |     // Override JS | ||||||
| @@ -60,6 +58,9 @@ module.exports = { | |||||||
|         'JSXEmptyExpression', |         'JSXEmptyExpression', | ||||||
|         'JSXSpreadChild', |         'JSXSpreadChild', | ||||||
|         'TSTypeParameterInstantiation', |         'TSTypeParameterInstantiation', | ||||||
|  |         'FunctionExpression > .params[decorators.length > 0]', | ||||||
|  |         'FunctionExpression > .params > :matches(Decorator, :not(:first-child))', | ||||||
|  |         'ClassBody.body > PropertyDefinition[decorators.length > 0] > .key', | ||||||
|       ], |       ], | ||||||
|       offsetTernaryExpressions: true, |       offsetTernaryExpressions: true, | ||||||
|     }], |     }], | ||||||
| @@ -104,6 +105,7 @@ module.exports = { | |||||||
|     '@typescript-eslint/no-loss-of-precision': 'error', |     '@typescript-eslint/no-loss-of-precision': 'error', | ||||||
|     'lines-between-class-members': 'off', |     'lines-between-class-members': 'off', | ||||||
|     '@typescript-eslint/lines-between-class-members': ['error', 'always', { exceptAfterSingleLine: true }], |     '@typescript-eslint/lines-between-class-members': ['error', 'always', { exceptAfterSingleLine: true }], | ||||||
|  |  | ||||||
|     // The following rule overrides require a parser service, aka. require a `typescript.json` path. |     // The following rule overrides require a parser service, aka. require a `typescript.json` path. | ||||||
|     // This needs to be done individually for each project, and it slows down linting significantly. |     // This needs to be done individually for each project, and it slows down linting significantly. | ||||||
|     // 'no-throw-literal': 'off', |     // 'no-throw-literal': 'off', | ||||||
| @@ -112,13 +114,16 @@ module.exports = { | |||||||
|     // '@typescript-eslint/no-implied-eval': 'error', |     // '@typescript-eslint/no-implied-eval': 'error', | ||||||
|     // 'dot-notation': 'off', |     // 'dot-notation': 'off', | ||||||
|     // '@typescript-eslint/dot-notation': ['error', { allowKeywords: true }], |     // '@typescript-eslint/dot-notation': ['error', { allowKeywords: true }], | ||||||
|  |     // '@typescript-eslint/no-floating-promises': 'error', | ||||||
|  |     // '@typescript-eslint/no-misused-promises': 'error', | ||||||
|  |  | ||||||
|     // off |     // off | ||||||
|     '@typescript-eslint/camelcase': 'off', |     '@typescript-eslint/consistent-indexed-object-style': 'off', | ||||||
|  |     '@typescript-eslint/naming-convention': 'off', | ||||||
|     '@typescript-eslint/explicit-function-return-type': 'off', |     '@typescript-eslint/explicit-function-return-type': 'off', | ||||||
|     '@typescript-eslint/explicit-member-accessibility': 'off', |     '@typescript-eslint/explicit-member-accessibility': 'off', | ||||||
|     '@typescript-eslint/no-explicit-any': 'off', |     '@typescript-eslint/no-explicit-any': 'off', | ||||||
|     '@typescript-eslint/no-parameter-properties': 'off', |     '@typescript-eslint/parameter-properties': 'off', | ||||||
|     '@typescript-eslint/no-empty-interface': 'off', |     '@typescript-eslint/no-empty-interface': 'off', | ||||||
|     '@typescript-eslint/ban-ts-ignore': 'off', |     '@typescript-eslint/ban-ts-ignore': 'off', | ||||||
|     '@typescript-eslint/no-empty-function': 'off', |     '@typescript-eslint/no-empty-function': 'off', | ||||||
| @@ -126,5 +131,6 @@ module.exports = { | |||||||
|     '@typescript-eslint/explicit-module-boundary-types': 'off', |     '@typescript-eslint/explicit-module-boundary-types': 'off', | ||||||
|     '@typescript-eslint/ban-types': 'off', |     '@typescript-eslint/ban-types': 'off', | ||||||
|     '@typescript-eslint/no-namespace': 'off', |     '@typescript-eslint/no-namespace': 'off', | ||||||
|  |     '@typescript-eslint/triple-slash-reference': 'off', | ||||||
|   }, |   }, | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,27 +1,27 @@ | |||||||
| { | { | ||||||
|   "name": "@antfu/eslint-config-ts", |   "name": "@antfu/eslint-config-ts", | ||||||
|   "version": "0.22.0", |   "version": "0.28.0", | ||||||
|   "description": "", |   "description": "", | ||||||
|   "keywords": [], |  | ||||||
|   "license": "MIT", |  | ||||||
|   "author": "Anthony Fu <anthonyfu117@hotmail.com> (https://github.com/antfu/)", |   "author": "Anthony Fu <anthonyfu117@hotmail.com> (https://github.com/antfu/)", | ||||||
|  |   "license": "MIT", | ||||||
|  |   "homepage": "https://github.com/antfu/eslint-config", | ||||||
|  |   "keywords": [ | ||||||
|  |     "eslint-config" | ||||||
|  |   ], | ||||||
|   "main": "index.js", |   "main": "index.js", | ||||||
|   "files": [ |   "files": [ | ||||||
|     "index.js" |     "index.js" | ||||||
|   ], |   ], | ||||||
|   "publishConfig": { |  | ||||||
|     "access": "public" |  | ||||||
|   }, |  | ||||||
|   "peerDependencies": { |   "peerDependencies": { | ||||||
|     "eslint": ">=7.4.0", |     "eslint": ">=7.4.0", | ||||||
|     "typescript": ">=3.9" |     "typescript": ">=3.9" | ||||||
|   }, |   }, | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|     "@antfu/eslint-config-basic": "workspace:*", |     "@antfu/eslint-config-basic": "workspace:*", | ||||||
|     "@typescript-eslint/eslint-plugin": "^5.20.0", |     "@typescript-eslint/eslint-plugin": "^5.36.1", | ||||||
|     "@typescript-eslint/parser": "^5.20.0" |     "@typescript-eslint/parser": "^5.36.1" | ||||||
|   }, |   }, | ||||||
|   "devDependencies": { |   "devDependencies": { | ||||||
|     "eslint": "^8.14.0" |     "eslint": "^8.23.0" | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -23,6 +23,7 @@ module.exports = { | |||||||
|     'vue/require-prop-types': 'off', |     'vue/require-prop-types': 'off', | ||||||
|     'vue/require-default-prop': 'off', |     'vue/require-default-prop': 'off', | ||||||
|     'vue/multi-word-component-names': 'off', |     'vue/multi-word-component-names': 'off', | ||||||
|  |     'vue/prefer-import-from-vue': 'off', | ||||||
|  |  | ||||||
|     // reactivity transform |     // reactivity transform | ||||||
|     'vue/no-setup-props-destructure': 'off', |     'vue/no-setup-props-destructure': 'off', | ||||||
| @@ -30,5 +31,68 @@ module.exports = { | |||||||
|     'vue/component-tags-order': ['error', { |     'vue/component-tags-order': ['error', { | ||||||
|       order: ['script', 'template', 'style'], |       order: ['script', 'template', 'style'], | ||||||
|     }], |     }], | ||||||
|  |     'vue/block-tag-newline': ['error', { | ||||||
|  |       singleline: 'always', | ||||||
|  |       multiline: 'always', | ||||||
|  |     }], | ||||||
|  |     'vue/component-name-in-template-casing': ['error', 'PascalCase'], | ||||||
|  |     'vue/component-options-name-casing': ['error', 'PascalCase'], | ||||||
|  |     'vue/custom-event-name-casing': ['error', 'camelCase'], | ||||||
|  |     'vue/define-macros-order': ['error', { | ||||||
|  |       order: ['defineProps', 'defineEmits'], | ||||||
|  |     }], | ||||||
|  |     'vue/html-comment-content-spacing': ['error', 'always', { | ||||||
|  |       exceptions: ['-'], | ||||||
|  |     }], | ||||||
|  |     'vue/no-restricted-v-bind': ['error', '/^v-/'], | ||||||
|  |     'vue/no-useless-v-bind': 'error', | ||||||
|  |     'vue/no-v-text-v-html-on-component': 'error', | ||||||
|  |     'vue/padding-line-between-blocks': ['error', 'always'], | ||||||
|  |     'vue/prefer-separate-static-class': 'error', | ||||||
|  |  | ||||||
|  |     // extensions | ||||||
|  |     'vue/array-bracket-spacing': ['error', 'never'], | ||||||
|  |     'vue/arrow-spacing': ['error', { before: true, after: true }], | ||||||
|  |     'vue/block-spacing': ['error', 'always'], | ||||||
|  |     'vue/brace-style': ['error', 'stroustrup', { allowSingleLine: true }], | ||||||
|  |     'vue/comma-dangle': ['error', 'always-multiline'], | ||||||
|  |     'vue/comma-spacing': ['error', { before: false, after: true }], | ||||||
|  |     'vue/comma-style': ['error', 'last'], | ||||||
|  |     'vue/dot-location': ['error', 'property'], | ||||||
|  |     'vue/dot-notation': ['error', { allowKeywords: true }], | ||||||
|  |     'vue/eqeqeq': ['error', 'smart'], | ||||||
|  |     // 'vue/func-call-spacing': ['off', 'never'], | ||||||
|  |     'vue/key-spacing': ['error', { beforeColon: false, afterColon: true }], | ||||||
|  |     'vue/keyword-spacing': ['error', { before: true, after: true }], | ||||||
|  |     'vue/no-constant-condition': 'warn', | ||||||
|  |     'vue/no-empty-pattern': 'error', | ||||||
|  |     'vue/no-extra-parens': ['error', 'functions'], | ||||||
|  |     'vue/no-irregular-whitespace': 'error', | ||||||
|  |     'vue/no-loss-of-precision': 'error', | ||||||
|  |     'vue/no-restricted-syntax': [ | ||||||
|  |       'error', | ||||||
|  |       'DebuggerStatement', | ||||||
|  |       'LabeledStatement', | ||||||
|  |       'WithStatement', | ||||||
|  |     ], | ||||||
|  |     'vue/no-sparse-arrays': 'error', | ||||||
|  |     'vue/object-curly-newline': ['error', { multiline: true, consistent: true }], | ||||||
|  |     'vue/object-curly-spacing': ['error', 'always'], | ||||||
|  |     'vue/object-property-newline': ['error', { allowMultiplePropertiesPerLine: true }], | ||||||
|  |     'vue/object-shorthand': [ | ||||||
|  |       'error', | ||||||
|  |       'always', | ||||||
|  |       { | ||||||
|  |         ignoreConstructors: false, | ||||||
|  |         avoidQuotes: true, | ||||||
|  |       }, | ||||||
|  |     ], | ||||||
|  |     'vue/operator-linebreak': ['error', 'before'], | ||||||
|  |     'vue/prefer-template': 'error', | ||||||
|  |     'vue/quote-props': ['error', 'consistent-as-needed'], | ||||||
|  |     'vue/space-in-parens': ['error', 'never'], | ||||||
|  |     'vue/space-infix-ops': 'error', | ||||||
|  |     'vue/space-unary-ops': ['error', { words: true, nonwords: false }], | ||||||
|  |     'vue/template-curly-spacing': 'error', | ||||||
|   }, |   }, | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,10 +1,12 @@ | |||||||
| { | { | ||||||
|   "name": "@antfu/eslint-config-vue", |   "name": "@antfu/eslint-config-vue", | ||||||
|   "version": "0.22.0", |   "version": "0.28.0", | ||||||
|   "description": "", |   "description": "", | ||||||
|   "keywords": [], |  | ||||||
|   "license": "MIT", |  | ||||||
|   "author": "Anthony Fu <anthonyfu117@hotmail.com> (https://github.com/antfu/)", |   "author": "Anthony Fu <anthonyfu117@hotmail.com> (https://github.com/antfu/)", | ||||||
|  |   "license": "MIT", | ||||||
|  |   "keywords": [ | ||||||
|  |     "eslint-config" | ||||||
|  |   ], | ||||||
|   "main": "index.js", |   "main": "index.js", | ||||||
|   "files": [ |   "files": [ | ||||||
|     "index.js" |     "index.js" | ||||||
| @@ -12,14 +14,11 @@ | |||||||
|   "peerDependencies": { |   "peerDependencies": { | ||||||
|     "eslint": ">=7.4.0" |     "eslint": ">=7.4.0" | ||||||
|   }, |   }, | ||||||
|   "publishConfig": { |  | ||||||
|     "access": "public" |  | ||||||
|   }, |  | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|     "@antfu/eslint-config-ts": "workspace:*", |     "@antfu/eslint-config-ts": "workspace:*", | ||||||
|     "eslint-plugin-vue": "^8.7.1" |     "eslint-plugin-vue": "^9.4.0" | ||||||
|   }, |   }, | ||||||
|   "devDependencies": { |   "devDependencies": { | ||||||
|     "eslint": "^8.14.0" |     "eslint": "^8.23.0" | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										2094
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2094
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										11
									
								
								tsconfig.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								tsconfig.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | { | ||||||
|  |   "compilerOptions": { | ||||||
|  |     "baseUrl": "." | ||||||
|  |   }, | ||||||
|  |   "include": [ | ||||||
|  |     "./packages/**/*.ts" | ||||||
|  |   ], | ||||||
|  |   "exclude": [ | ||||||
|  |     "./fixtures/**/*.*" | ||||||
|  |   ] | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user