refactor: migrate to nuxt
This commit is contained in:
@@ -1,4 +1,7 @@
|
|||||||
{
|
{
|
||||||
"extends": "@antfu",
|
"extends": [
|
||||||
|
"@antfu",
|
||||||
|
"@unocss"
|
||||||
|
],
|
||||||
"ignorePatterns": "*.json"
|
"ignorePatterns": "*.json"
|
||||||
}
|
}
|
||||||
|
|||||||
17
.github/workflows/ci.yml
vendored
17
.github/workflows/ci.yml
vendored
@@ -1,20 +1,25 @@
|
|||||||
name: CI
|
name: CI
|
||||||
|
|
||||||
on:
|
on:
|
||||||
- push
|
push:
|
||||||
- pull_request
|
branches:
|
||||||
|
- main
|
||||||
|
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
lint:
|
lint:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
- name: Install pnpm
|
- name: Install pnpm
|
||||||
uses: pnpm/action-setup@v2
|
uses: pnpm/action-setup@v2
|
||||||
|
|
||||||
- name: Set node
|
- name: Set node
|
||||||
uses: actions/setup-node@v2
|
uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version: 16.x
|
node-version: 16.x
|
||||||
cache: pnpm
|
cache: pnpm
|
||||||
@@ -28,13 +33,13 @@ jobs:
|
|||||||
typecheck:
|
typecheck:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
- name: Install pnpm
|
- name: Install pnpm
|
||||||
uses: pnpm/action-setup@v2
|
uses: pnpm/action-setup@v2
|
||||||
|
|
||||||
- name: Set node
|
- name: Set node
|
||||||
uses: actions/setup-node@v2
|
uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version: 16.x
|
node-version: 16.x
|
||||||
cache: pnpm
|
cache: pnpm
|
||||||
|
|||||||
14
.gitignore
vendored
14
.gitignore
vendored
@@ -5,10 +5,14 @@ src/data/recipe.json
|
|||||||
.vite-ssg-dist
|
.vite-ssg-dist
|
||||||
.vite-ssg-temp
|
.vite-ssg-temp
|
||||||
*.local
|
*.local
|
||||||
dist
|
|
||||||
dist-ssr
|
|
||||||
node_modules
|
|
||||||
.idea/
|
|
||||||
*.log
|
|
||||||
|
|
||||||
esbuild-kit
|
esbuild-kit
|
||||||
|
|
||||||
|
# nuxt
|
||||||
|
node_modules
|
||||||
|
*.log
|
||||||
|
dist
|
||||||
|
.output
|
||||||
|
.nuxt
|
||||||
|
.env
|
||||||
|
.idea/
|
||||||
|
|||||||
1
.npmrc
1
.npmrc
@@ -1,2 +1,3 @@
|
|||||||
shamefully-hoist=true
|
shamefully-hoist=true
|
||||||
strict-peer-dependencies=false
|
strict-peer-dependencies=false
|
||||||
|
shell-emulator=true
|
||||||
|
|||||||
4
.stackblitzrc
Normal file
4
.stackblitzrc
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"installDependencies": true,
|
||||||
|
"startCommand": "npm run dev"
|
||||||
|
}
|
||||||
5
.vscode/extensions.json
vendored
5
.vscode/extensions.json
vendored
@@ -2,10 +2,9 @@
|
|||||||
"recommendations": [
|
"recommendations": [
|
||||||
"antfu.iconify",
|
"antfu.iconify",
|
||||||
"antfu.unocss",
|
"antfu.unocss",
|
||||||
"antfu.vite",
|
"antfu.goto-alias",
|
||||||
"csstools.postcss",
|
"csstools.postcss",
|
||||||
"dbaeumer.vscode-eslint",
|
"dbaeumer.vscode-eslint",
|
||||||
"johnsoncodehk.volar",
|
"vue.volar"
|
||||||
"lokalise.i18n-ally"
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
4
.vscode/settings.json
vendored
4
.vscode/settings.json
vendored
@@ -1,9 +1,5 @@
|
|||||||
{
|
{
|
||||||
"cSpell.words": ["Vitesse", "Vite", "unocss", "vitest", "vueuse", "pinia", "demi", "antfu", "iconify", "intlify", "vitejs", "unplugin", "pnpm"],
|
"cSpell.words": ["Vitesse", "Vite", "unocss", "vitest", "vueuse", "pinia", "demi", "antfu", "iconify", "intlify", "vitejs", "unplugin", "pnpm"],
|
||||||
"i18n-ally.sourceLanguage": "en",
|
|
||||||
"i18n-ally.keystyle": "nested",
|
|
||||||
"i18n-ally.localesPaths": "locales",
|
|
||||||
"i18n-ally.sortKeys": true,
|
|
||||||
"prettier.enable": false,
|
"prettier.enable": false,
|
||||||
"editor.codeActionsOnSave": {
|
"editor.codeActionsOnSave": {
|
||||||
"source.fixAll.eslint": true,
|
"source.fixAll.eslint": true,
|
||||||
|
|||||||
@@ -1,21 +1,17 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
// import { installPrompt } from './utils/pwa'
|
// import { installPrompt } from './utils/pwa'
|
||||||
import { isDark } from '~/composables'
|
import { appName } from '~/constants'
|
||||||
|
|
||||||
// https://github.com/vueuse/head
|
// https://github.com/vueuse/head
|
||||||
// you can use this to manipulate the document head in any components,
|
// you can use this to manipulate the document head in any components,
|
||||||
// they will be rendered correctly in the html results with vite-ssg
|
// they will be rendered correctly in the html results with vite-ssg
|
||||||
useHead({
|
useHead({
|
||||||
title: '隔离食用手册',
|
title: appName,
|
||||||
meta: [
|
meta: [
|
||||||
{
|
{
|
||||||
name: 'description',
|
name: 'description',
|
||||||
content: '好的,今天我们来做菜!',
|
content: '好的,今天我们来做菜!',
|
||||||
},
|
},
|
||||||
{
|
|
||||||
name: 'theme-color',
|
|
||||||
content: computed(() => isDark.value ? '#121212' : '#fff'),
|
|
||||||
},
|
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -23,8 +19,9 @@ useHead({
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<RouterView />
|
<VitePwaManifest />
|
||||||
<!-- <ClientOnly>
|
<NuxtLayout>
|
||||||
<ReloadPrompt />
|
<NuxtLoadingIndicator />
|
||||||
</ClientOnly> -->
|
<NuxtPage />
|
||||||
|
</NuxtLayout>
|
||||||
</template>
|
</template>
|
||||||
@@ -1,7 +1,9 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import VueAboutMe from 'vue-about-me'
|
import VueAboutMe from 'vue-about-me'
|
||||||
import 'vue-about-me/style.css'
|
import 'vue-about-me/style.css'
|
||||||
import { isDark } from '~/composables'
|
|
||||||
|
const color = useColorMode()
|
||||||
|
const isDark = computed(() => color.value === 'dark')
|
||||||
|
|
||||||
const copyright = {
|
const copyright = {
|
||||||
name: 'Cook',
|
name: 'Cook',
|
||||||
@@ -82,3 +82,4 @@ const buildDate = (new Date(parseInt(now) * 1000)).toLocaleDateString()
|
|||||||
</div> -->
|
</div> -->
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
constants
|
||||||
@@ -1,22 +1,17 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { useGtm } from '@gtm-support/vue-gtm'
|
|
||||||
import { storeToRefs } from 'pinia'
|
import { storeToRefs } from 'pinia'
|
||||||
import type { StuffItem } from '~/data/food'
|
import type { StuffItem } from '~/data/food'
|
||||||
import { meat, staple, tools, vegetable } from '~/data/food'
|
import { meat, staple, tools, vegetable } from '~/data/food'
|
||||||
import recipeData from '~/data/recipe.json'
|
|
||||||
import type { Recipe, RecipeItem } from '~/types'
|
|
||||||
|
|
||||||
import { useInvisibleElement } from '~/composables/helper'
|
import { useInvisibleElement } from '~/composables/helper'
|
||||||
import { useEmojiAnimation } from '~/composables/animation'
|
import { useEmojiAnimation } from '~/composables/animation'
|
||||||
import { useRecipe } from '~/composables/recipe'
|
import { useRecipe } from '~/composables/recipe'
|
||||||
|
|
||||||
const recipe = ref<Recipe>(recipeData as Recipe)
|
|
||||||
|
|
||||||
const rStore = useRecipeStore()
|
const rStore = useRecipeStore()
|
||||||
const { curTool } = storeToRefs(rStore)
|
const { curTool } = storeToRefs(rStore)
|
||||||
const curStuff = computed(() => rStore.selectedStuff)
|
const curStuff = computed(() => rStore.selectedStuff)
|
||||||
|
|
||||||
const { displayedRecipe, clickTool } = useRecipe(recipe)
|
const { displayedRecipe, clickTool } = useRecipe(rStore.recipes)
|
||||||
|
|
||||||
const recipeBtn = ref<HTMLButtonElement>()
|
const recipeBtn = ref<HTMLButtonElement>()
|
||||||
const { playAnimation } = useEmojiAnimation(recipeBtn)
|
const { playAnimation } = useEmojiAnimation(recipeBtn)
|
||||||
@@ -43,19 +38,14 @@ function toggleStuff(item: StuffItem, category = '', _e?: Event) {
|
|||||||
|
|
||||||
const recipePanel = ref()
|
const recipePanel = ref()
|
||||||
const { isVisible, show } = useInvisibleElement(recipePanel)
|
const { isVisible, show } = useInvisibleElement(recipePanel)
|
||||||
|
|
||||||
function generateRandomRecipe() {
|
|
||||||
return recipe.value[Math.floor(Math.random() * recipe.value.length)]
|
|
||||||
}
|
|
||||||
const randomRecipe = ref<RecipeItem>(generateRandomRecipe())
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<Transition>
|
<Transition>
|
||||||
<button
|
<button
|
||||||
v-show="displayedRecipe.length !== recipe.length && isVisible"
|
v-show="displayedRecipe.length !== rStore.recipes.length && isVisible"
|
||||||
ref="recipeBtn"
|
ref="recipeBtn"
|
||||||
class="cursor-pointer fixed inline-flex justify-center items-center rounded rounded-full shadow hover:shadow-md z-9"
|
class="fixed z-9 inline-flex cursor-pointer items-center justify-center rounded rounded-full shadow hover:shadow-md"
|
||||||
bg="green-50 dark:green-900" w="10" h="10" bottom="4" right="4"
|
bg="green-50 dark:green-900" w="10" h="10" bottom="4" right="4"
|
||||||
text="green-600 dark:green-300"
|
text="green-600 dark:green-300"
|
||||||
@click="show"
|
@click="show"
|
||||||
@@ -147,15 +137,11 @@ const randomRecipe = ref<RecipeItem>(generateRandomRecipe())
|
|||||||
</ToolTag>
|
</ToolTag>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div ref="recipePanel" m="2 t-4" p="2" class="relative transition shadow hover:shadow-md" bg="gray-400/8">
|
<div ref="recipePanel" m="2 t-4" p="2" class="relative shadow transition hover:shadow-md" bg="gray-400/8">
|
||||||
<h2 text="xl" font="bold" p="1">
|
<h2 text="xl" font="bold" p="1">
|
||||||
🍲 来看看组合出的菜谱吧!
|
🍲 来看看组合出的菜谱吧!
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
<!-- <div class="absolute left-5 top-5 icon-btn">
|
|
||||||
<div i-ri-compass-line />
|
|
||||||
</div> -->
|
|
||||||
|
|
||||||
<ToggleMode />
|
<ToggleMode />
|
||||||
|
|
||||||
<!-- <Switch /> -->
|
<!-- <Switch /> -->
|
||||||
@@ -188,12 +174,7 @@ const randomRecipe = ref<RecipeItem>(generateRandomRecipe())
|
|||||||
|
|
||||||
<hr m="y-2">
|
<hr m="y-2">
|
||||||
|
|
||||||
<div class="inline-flex justify-center items-center">
|
<RandomRecipe />
|
||||||
今天吃什么?<div class="transition" hover="text-blue-500" inline-block cursor-pointer i-ri-refresh-line @click="randomRecipe = generateRandomRecipe()" />
|
|
||||||
</div>
|
|
||||||
<p m="t-2">
|
|
||||||
<DishTag :dish="randomRecipe" />
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
21
components/DarkToggle.vue
Normal file
21
components/DarkToggle.vue
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
const color = useColorMode()
|
||||||
|
|
||||||
|
useHead({
|
||||||
|
meta: [{
|
||||||
|
id: 'theme-color',
|
||||||
|
name: 'theme-color',
|
||||||
|
content: () => color.value === 'dark' ? '#222222' : '#ffffff',
|
||||||
|
}],
|
||||||
|
})
|
||||||
|
|
||||||
|
function toggleDark() {
|
||||||
|
color.preference = color.value === 'dark' ? 'light' : 'dark'
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<button class="mx-2 icon-btn hover:text-yellow-400 !outline-none" title="切换" @click="toggleDark()">
|
||||||
|
<div i="ri-sun-line dark:ri-moon-line" />
|
||||||
|
</button>
|
||||||
|
</template>
|
||||||
@@ -1,6 +1,4 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { useAppStore } from '~/store/app'
|
|
||||||
|
|
||||||
const app = useAppStore()
|
const app = useAppStore()
|
||||||
|
|
||||||
function install() {
|
function install() {
|
||||||
25
components/Menu.vue
Normal file
25
components/Menu.vue
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
<template>
|
||||||
|
<nav text-xl p="t-6">
|
||||||
|
<NuxtLink class="mx-2 icon-btn" to="/" title="首页">
|
||||||
|
<div i-ri-home-2-line />
|
||||||
|
</NuxtLink>
|
||||||
|
|
||||||
|
<DarkToggle />
|
||||||
|
|
||||||
|
<NuxtLink class="mx-2 icon-btn hover:text-orange-400" to="/help" title="帮助">
|
||||||
|
<div i-ri-question-line />
|
||||||
|
</NuxtLink>
|
||||||
|
|
||||||
|
<NuxtLink class="mx-2 icon-btn hover:text-blue-400" to="/about" title="关于">
|
||||||
|
<div i-ri-information-line />
|
||||||
|
</NuxtLink>
|
||||||
|
|
||||||
|
<a class="mx-2 icon-btn hover:text-pink-400" rel="noreferrer" href="https://space.bilibili.com/1579790" target="_blank" title="BiliBili">
|
||||||
|
<div i-ri-bilibili-line />
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a class="hover:text-black-400 mx-2 icon-btn" rel="noreferrer" href="https://github.com/YunYouJun/cook" target="_blank" title="GitHub">
|
||||||
|
<div i-ri-github-line />
|
||||||
|
</a>
|
||||||
|
</nav>
|
||||||
|
</template>
|
||||||
12
components/RandomRecipe.vue
Normal file
12
components/RandomRecipe.vue
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
<script lang="ts" setup>
|
||||||
|
const rStore = useRecipeStore()
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div class="inline-flex items-center justify-center">
|
||||||
|
今天吃什么?<div class="transition" hover="text-blue-500" i-ri-refresh-line inline-block cursor-pointer @click="rStore.random" />
|
||||||
|
</div>
|
||||||
|
<div m="t-2">
|
||||||
|
<DishTag :dish="rStore.randomRecipe" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import type { SearchMode } from '~/store/recipe'
|
import type { SearchMode } from '~/composables/store/recipe'
|
||||||
import { useRecipeStore } from '~/store/recipe'
|
|
||||||
|
|
||||||
const rStore = useRecipeStore()
|
const rStore = useRecipeStore()
|
||||||
|
|
||||||
@@ -22,7 +21,7 @@ const searchModes: {
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<button
|
<button
|
||||||
v-for="mode in searchModes" :key="mode.id" class="tag rounded px-2"
|
v-for="mode in searchModes" :key="mode.id" class="rounded px-2 tag"
|
||||||
:bg="mode.id === rStore.curMode ? 'orange-500 dark:orange-600 opacity-100' : 'orange-300 opacity-20'"
|
:bg="mode.id === rStore.curMode ? 'orange-500 dark:orange-600 opacity-100' : 'orange-300 opacity-20'"
|
||||||
:text="mode.id === rStore.curMode ? 'orange-100' : 'orange-800 dark:orange-200'"
|
:text="mode.id === rStore.curMode ? 'orange-100' : 'orange-800 dark:orange-200'"
|
||||||
@click="rStore.setMode(mode.id)"
|
@click="rStore.setMode(mode.id)"
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { useGtm } from '@gtm-support/vue-gtm'
|
|
||||||
import { tools } from '~/data/food'
|
import { tools } from '~/data/food'
|
||||||
import type { RecipeItem } from '~/types'
|
import type { RecipeItem } from '~/types'
|
||||||
import { getEmojisFromStuff } from '~/utils'
|
import { getEmojisFromStuff } from '~/utils'
|
||||||
@@ -31,12 +30,12 @@ const dishLabel = computed(() => {
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<a
|
<a
|
||||||
:href="dish.link || `https://www.bilibili.com/video/${dish.bv}`" target="_blank" class="dish-tag tag rounded" p="x-2"
|
:href="dish.link || `https://www.bilibili.com/video/${dish.bv}`" target="_blank" class="dish-tag rounded tag" p="x-2"
|
||||||
border="~ blue-200 dark:blue-800"
|
border="~ blue-200 dark:blue-800"
|
||||||
bg="blue-300 opacity-20"
|
bg="blue-300 opacity-20"
|
||||||
@click="triggerGtm(dish.name)"
|
@click="triggerGtm(dish.name)"
|
||||||
>
|
>
|
||||||
<span m="r-1" class="inline-flex justify-center items-center" text="sm blue-700 dark:blue-200">
|
<span m="r-1" class="inline-flex items-center justify-center" text="sm blue-700 dark:blue-200">
|
||||||
{{ dishLabel }}
|
{{ dishLabel }}
|
||||||
</span>
|
</span>
|
||||||
<span v-for="tool, i in tools" :key="i" inline-flex>
|
<span v-for="tool, i in tools" :key="i" inline-flex>
|
||||||
@@ -6,7 +6,7 @@ defineProps<{
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<span
|
<span
|
||||||
class="vegetable-tag tag rounded" p="x-2"
|
class="vegetable-tag rounded tag" p="x-2"
|
||||||
border="~ green-200 dark:green-800"
|
border="~ green-200 dark:green-800"
|
||||||
:bg="active ? 'green-600 opacity-90' : 'green-300 opacity-20'"
|
:bg="active ? 'green-600 opacity-90' : 'green-300 opacity-20'"
|
||||||
:text="active ? 'green-100' : 'green-800 dark:green-200'"
|
:text="active ? 'green-100' : 'green-800 dark:green-200'"
|
||||||
3
composables/index.ts
Normal file
3
composables/index.ts
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
export * from './store'
|
||||||
|
|
||||||
|
// others is auto exported
|
||||||
@@ -1,12 +1,10 @@
|
|||||||
import type { Ref } from 'vue'
|
|
||||||
import { storeToRefs } from 'pinia'
|
import { storeToRefs } from 'pinia'
|
||||||
import { useGtm } from '@gtm-support/vue-gtm'
|
import type { Recipes } from '~/types'
|
||||||
import type { Recipe } from '~/types'
|
|
||||||
|
|
||||||
import { useRecipeStore } from '~/store/recipe'
|
|
||||||
import type { StuffItem } from '~/data/food'
|
import type { StuffItem } from '~/data/food'
|
||||||
|
import { useRecipeStore } from '~/composables/store/recipe'
|
||||||
|
|
||||||
export function useRecipe(recipe: Ref<Recipe>) {
|
export function useRecipe(recipe: Recipes) {
|
||||||
const gtm = useGtm()
|
const gtm = useGtm()
|
||||||
|
|
||||||
const rStore = useRecipeStore()
|
const rStore = useRecipeStore()
|
||||||
@@ -18,17 +16,17 @@ export function useRecipe(recipe: Ref<Recipe>) {
|
|||||||
// if keyword exist, return result directly
|
// if keyword exist, return result directly
|
||||||
const keyword = rStore.keyword
|
const keyword = rStore.keyword
|
||||||
if (keyword)
|
if (keyword)
|
||||||
return recipe.value.filter(item => item.name.includes(keyword))
|
return recipe.filter(item => item.name.includes(keyword))
|
||||||
|
|
||||||
if (curMode.value === 'strict') {
|
if (curMode.value === 'strict') {
|
||||||
return recipe.value.filter((item) => {
|
return recipe.filter((item) => {
|
||||||
const stuffFlag = curStuff.value.every(stuff => item.stuff.includes(stuff))
|
const stuffFlag = curStuff.value.every(stuff => item.stuff.includes(stuff))
|
||||||
const toolFlag = item.tools?.includes(curTool.value)
|
const toolFlag = item.tools?.includes(curTool.value)
|
||||||
return curTool.value ? (stuffFlag && toolFlag) : stuffFlag
|
return curTool.value ? (stuffFlag && toolFlag) : stuffFlag
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
else if (curMode.value === 'loose') {
|
else if (curMode.value === 'loose') {
|
||||||
return recipe.value.filter((item) => {
|
return recipe.filter((item) => {
|
||||||
const stuffFlag = curStuff.value.some(stuff => item.stuff.includes(stuff))
|
const stuffFlag = curStuff.value.some(stuff => item.stuff.includes(stuff))
|
||||||
const toolFlag = item.tools?.includes(curTool.value)
|
const toolFlag = item.tools?.includes(curTool.value)
|
||||||
|
|
||||||
@@ -48,7 +46,7 @@ export function useRecipe(recipe: Ref<Recipe>) {
|
|||||||
}
|
}
|
||||||
// survival
|
// survival
|
||||||
else {
|
else {
|
||||||
return recipe.value.filter((item) => {
|
return recipe.filter((item) => {
|
||||||
const stuffFlag = item.stuff.every(stuff => curStuff.value.includes(stuff))
|
const stuffFlag = item.stuff.every(stuff => curStuff.value.includes(stuff))
|
||||||
const toolFlag = item.tools?.includes(curTool.value)
|
const toolFlag = item.tools?.includes(curTool.value)
|
||||||
return curTool.value ? (stuffFlag && toolFlag) : stuffFlag
|
return curTool.value ? (stuffFlag && toolFlag) : stuffFlag
|
||||||
3
composables/store/index.ts
Normal file
3
composables/store/index.ts
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
export * from './app'
|
||||||
|
export * from './recipe'
|
||||||
|
export * from './user'
|
||||||
@@ -1,7 +1,20 @@
|
|||||||
import { acceptHMRUpdate, defineStore } from 'pinia'
|
import { acceptHMRUpdate, defineStore } from 'pinia'
|
||||||
|
import { useStorage } from '@vueuse/core'
|
||||||
|
import type { RecipeItem, Recipes } from '~/types'
|
||||||
|
|
||||||
|
import recipeData from '~/data/recipe.json'
|
||||||
|
|
||||||
const namespace = 'cook'
|
const namespace = 'cook'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成随机菜谱
|
||||||
|
* @param recipes
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
function generateRandomRecipe(recipes: Recipes) {
|
||||||
|
return recipes[Math.floor(Math.random() * recipes.length)]
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* survival: 生存模式
|
* survival: 生存模式
|
||||||
* strict: 严格
|
* strict: 严格
|
||||||
@@ -10,6 +23,8 @@ const namespace = 'cook'
|
|||||||
export type SearchMode = 'survival' | 'loose' | 'strict'
|
export type SearchMode = 'survival' | 'loose' | 'strict'
|
||||||
|
|
||||||
export const useRecipeStore = defineStore('recipe', () => {
|
export const useRecipeStore = defineStore('recipe', () => {
|
||||||
|
const recipes = recipeData as Recipes
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 搜索关键字
|
* 搜索关键字
|
||||||
*/
|
*/
|
||||||
@@ -63,12 +78,19 @@ export const useRecipeStore = defineStore('recipe', () => {
|
|||||||
curStuff.value.add(name)
|
curStuff.value.add(name)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const randomRecipe = ref<RecipeItem>(generateRandomRecipe(recipes))
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
recipes,
|
||||||
|
|
||||||
keyword,
|
keyword,
|
||||||
curTool,
|
curTool,
|
||||||
curMode,
|
curMode,
|
||||||
selectedStuff,
|
selectedStuff,
|
||||||
|
|
||||||
|
randomRecipe,
|
||||||
|
random: () => { randomRecipe.value = generateRandomRecipe(recipes) },
|
||||||
|
|
||||||
clearKeyWord: () => { keyword.value = '' },
|
clearKeyWord: () => { keyword.value = '' },
|
||||||
toggleStuff,
|
toggleStuff,
|
||||||
toggleTools,
|
toggleTools,
|
||||||
79
config/pwa.ts
Normal file
79
config/pwa.ts
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
import process from 'node:process'
|
||||||
|
import type { ModuleOptions } from '@vite-pwa/nuxt'
|
||||||
|
import { appDescription, appName } from '../constants/index'
|
||||||
|
|
||||||
|
const scope = '/'
|
||||||
|
|
||||||
|
export const pwa: ModuleOptions = {
|
||||||
|
registerType: 'autoUpdate',
|
||||||
|
scope,
|
||||||
|
base: scope,
|
||||||
|
manifest: {
|
||||||
|
id: scope,
|
||||||
|
scope,
|
||||||
|
name: appName,
|
||||||
|
short_name: appName,
|
||||||
|
description: appDescription,
|
||||||
|
theme_color: '#ffffff',
|
||||||
|
icons: [
|
||||||
|
{
|
||||||
|
src: 'pwa-192x192.png',
|
||||||
|
sizes: '192x192',
|
||||||
|
type: 'image/png',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: 'pwa-512x512.png',
|
||||||
|
sizes: '512x512',
|
||||||
|
type: 'image/png',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: 'maskable-icon.png',
|
||||||
|
sizes: '512x512',
|
||||||
|
type: 'image/png',
|
||||||
|
purpose: 'any maskable',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
workbox: {
|
||||||
|
globPatterns: ['**/*.{js,css,html,txt,png,ico,svg}'],
|
||||||
|
navigateFallbackDenylist: [/^\/api\//],
|
||||||
|
navigateFallback: '/',
|
||||||
|
cleanupOutdatedCaches: true,
|
||||||
|
runtimeCaching: [
|
||||||
|
{
|
||||||
|
urlPattern: /^https:\/\/fonts.googleapis.com\/.*/i,
|
||||||
|
handler: 'CacheFirst',
|
||||||
|
options: {
|
||||||
|
cacheName: 'google-fonts-cache',
|
||||||
|
expiration: {
|
||||||
|
maxEntries: 10,
|
||||||
|
maxAgeSeconds: 60 * 60 * 24 * 365, // <== 365 days
|
||||||
|
},
|
||||||
|
cacheableResponse: {
|
||||||
|
statuses: [0, 200],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
urlPattern: /^https:\/\/fonts.gstatic.com\/.*/i,
|
||||||
|
handler: 'CacheFirst',
|
||||||
|
options: {
|
||||||
|
cacheName: 'gstatic-fonts-cache',
|
||||||
|
expiration: {
|
||||||
|
maxEntries: 10,
|
||||||
|
maxAgeSeconds: 60 * 60 * 24 * 365, // <== 365 days
|
||||||
|
},
|
||||||
|
cacheableResponse: {
|
||||||
|
statuses: [0, 200],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
registerWebManifestInRouteRules: true,
|
||||||
|
writePlugin: true,
|
||||||
|
devOptions: {
|
||||||
|
enabled: process.env.VITE_PLUGIN_PWA === 'true',
|
||||||
|
navigateFallback: scope,
|
||||||
|
},
|
||||||
|
}
|
||||||
4
constants/index.ts
Normal file
4
constants/index.ts
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
export const appName = '隔离食用手册'
|
||||||
|
export const appDescription = '好的,今天我们来做菜!'
|
||||||
|
|
||||||
|
export * from './links'
|
||||||
@@ -7,8 +7,8 @@ title: 关于
|
|||||||
> 希望大家吃的开心!
|
> 希望大家吃的开心!
|
||||||
|
|
||||||
<div class="inline-flex justify-center items-center">
|
<div class="inline-flex justify-center items-center">
|
||||||
代码仓库:<a class="inline-flex items-center justify-center" href="https://github.com/YunYouJun/cook" target="_blank">
|
代码仓库:<a class="inline-flex items-center justify-center" href="https://github.com/YunYouJun/cook" target="_blank">
|
||||||
<div m="r-1" inline-flex i-ri-github-line />YunYouJun/cook</a>
|
<div m="r-1" inline-flex i-ri-github-line></div>YunYouJun/cook</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<br />
|
<br />
|
||||||
@@ -54,7 +54,7 @@ Hello,我是云游君。
|
|||||||
此外,我也会继续尝试做一些有趣或有用的东西,并分享给大家。
|
此外,我也会继续尝试做一些有趣或有用的东西,并分享给大家。
|
||||||
你也可以在这些地方找到我。
|
你也可以在这些地方找到我。
|
||||||
|
|
||||||
<AboutMe />
|
<!-- :AboutMe -->
|
||||||
|
|
||||||
对了,给微信公众号「云游君」发送「做菜」也可以快速找到这个网址。
|
对了,给微信公众号「云游君」发送「做菜」也可以快速找到这个网址。
|
||||||
|
|
||||||
1
data/recipe.json
Normal file
1
data/recipe.json
Normal file
File diff suppressed because one or more lines are too long
36
index.html
36
index.html
@@ -1,36 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
||||||
<link rel="icon" href="/favicon.svg" type="image/svg+xml">
|
|
||||||
<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">
|
|
||||||
<meta name="description" content="好的,今天我们来做菜!">
|
|
||||||
<title>隔离食用手册</title>
|
|
||||||
<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>
|
|
||||||
<script>
|
|
||||||
// remove pwa
|
|
||||||
navigator.serviceWorker.getRegistrations().then((registrations) => {
|
|
||||||
for (const registration of registrations)
|
|
||||||
registration.unregister()
|
|
||||||
})
|
|
||||||
</script>
|
|
||||||
</head>
|
|
||||||
<body class="font-sans">
|
|
||||||
<!-- for img preview -->
|
|
||||||
<div style="display: none;">
|
|
||||||
<img src="/pwa-512x512.png" />
|
|
||||||
</div>
|
|
||||||
<div id="app"></div>
|
|
||||||
<script type="module" src="/src/main.ts"></script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
15
layouts/README.md
Normal file
15
layouts/README.md
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
## 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.
|
||||||
|
|
||||||
|
```html
|
||||||
|
<script setup lang="ts">
|
||||||
|
definePageMeta({
|
||||||
|
layout: 'home',
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
```
|
||||||
|
|
||||||
|
Learn more on https://nuxt.com/docs/guide/directory-structure/layouts
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<main class="px-4 text-center text-gray-700 dark:text-gray-200">
|
<main class="px-4 text-center text-gray-700 dark:text-gray-200">
|
||||||
<Menu />
|
<Menu />
|
||||||
<RouterView />
|
<slot />
|
||||||
<BaseFooter />
|
<BaseFooter />
|
||||||
</main>
|
</main>
|
||||||
</template>
|
</template>
|
||||||
@@ -1,18 +1,11 @@
|
|||||||
[build.environment]
|
[build.environment]
|
||||||
# bypass npm auto install
|
|
||||||
NPM_FLAGS = "--version"
|
|
||||||
NODE_VERSION = "16"
|
NODE_VERSION = "16"
|
||||||
|
|
||||||
[build]
|
[build]
|
||||||
publish = "dist"
|
publish = "dist"
|
||||||
command = "npx pnpm i --store=node_modules/.pnpm-store && npx pnpm run build"
|
command = "pnpm run build"
|
||||||
|
|
||||||
[[redirects]]
|
[[redirects]]
|
||||||
from = "/*"
|
from = "/*"
|
||||||
to = "/index.html"
|
to = "/index.html"
|
||||||
status = 200
|
status = 200
|
||||||
|
|
||||||
[[headers]]
|
|
||||||
for = "/manifest.webmanifest"
|
|
||||||
[headers.values]
|
|
||||||
Content-Type = "application/manifest+json"
|
|
||||||
|
|||||||
81
nuxt.config.ts
Normal file
81
nuxt.config.ts
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
import process from 'node:process'
|
||||||
|
import { pwa } from './config/pwa'
|
||||||
|
import { appDescription } from './constants/index'
|
||||||
|
|
||||||
|
Object.assign(process.env, {
|
||||||
|
VITE_COMMIT_REF: process.env.CF_PAGES_COMMIT_SHA || '',
|
||||||
|
})
|
||||||
|
|
||||||
|
export default defineNuxtConfig({
|
||||||
|
modules: [
|
||||||
|
'@vueuse/nuxt',
|
||||||
|
'@unocss/nuxt',
|
||||||
|
'@pinia/nuxt',
|
||||||
|
'@nuxtjs/color-mode',
|
||||||
|
'@vite-pwa/nuxt',
|
||||||
|
'@nuxt/content',
|
||||||
|
'@zadigetvoltaire/nuxt-gtm',
|
||||||
|
],
|
||||||
|
|
||||||
|
experimental: {
|
||||||
|
// when using generate, payload js assets included in sw precache manifest
|
||||||
|
// but missing on offline, disabling extraction it until fixed
|
||||||
|
payloadExtraction: false,
|
||||||
|
inlineSSRStyles: false,
|
||||||
|
renderJsonPayloads: true,
|
||||||
|
typedPages: true,
|
||||||
|
},
|
||||||
|
|
||||||
|
css: [
|
||||||
|
'@unocss/reset/tailwind.css',
|
||||||
|
'~/styles/css-vars.scss',
|
||||||
|
'~/styles/index.scss',
|
||||||
|
],
|
||||||
|
|
||||||
|
colorMode: {
|
||||||
|
classSuffix: '',
|
||||||
|
},
|
||||||
|
|
||||||
|
nitro: {
|
||||||
|
esbuild: {
|
||||||
|
options: {
|
||||||
|
target: 'esnext',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
prerender: {
|
||||||
|
crawlLinks: false,
|
||||||
|
routes: ['/'],
|
||||||
|
ignore: ['/hi'],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
app: {
|
||||||
|
head: {
|
||||||
|
viewport: 'width=device-width,initial-scale=1',
|
||||||
|
link: [
|
||||||
|
{ rel: 'icon', href: '/favicon.ico', sizes: 'any' },
|
||||||
|
{ rel: 'icon', type: 'image/svg+xml', href: '/nuxt.svg' },
|
||||||
|
{ rel: 'apple-touch-icon', href: '/apple-touch-icon.png' },
|
||||||
|
],
|
||||||
|
meta: [
|
||||||
|
{ name: 'viewport', content: 'width=device-width, initial-scale=1' },
|
||||||
|
{ name: 'description', content: appDescription },
|
||||||
|
{ name: 'apple-mobile-web-app-status-bar-style', content: 'black-translucent' },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
components: [
|
||||||
|
{ path: '~/components', pathPrefix: false },
|
||||||
|
],
|
||||||
|
|
||||||
|
gtm: {
|
||||||
|
id: 'GTM-5FJSV46',
|
||||||
|
},
|
||||||
|
|
||||||
|
pwa,
|
||||||
|
|
||||||
|
devtools: {
|
||||||
|
enabled: true,
|
||||||
|
},
|
||||||
|
})
|
||||||
84
package.json
84
package.json
@@ -1,71 +1,57 @@
|
|||||||
{
|
{
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"packageManager": "pnpm@8.6.10",
|
||||||
"packageManager": "pnpm@8.5.1",
|
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=14"
|
"node": ">=14"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "npm run convert && cross-env VITE_APP_BUILD_TIME=$(date +%s) vite-ssg build",
|
"build": "npm run convert && cross-env VITE_APP_BUILD_TIME=$(date +%s) nuxi build",
|
||||||
"convert": "tsx scripts/convert.ts",
|
"convert": "tsx scripts/convert.ts",
|
||||||
"dev": "cross-env VITE_APP_BUILD_TIME=$(date +%s) vite --port 3333 --open --host",
|
"dev": "cross-env VITE_APP_BUILD_TIME=$(date +%s) nuxi dev",
|
||||||
|
"dev:pwa": "VITE_PLUGIN_PWA=true nuxi dev",
|
||||||
|
"generate": "nuxi generate",
|
||||||
|
"start:generate": "npx serve .output/public",
|
||||||
|
"start": "node .output/server/index.mjs",
|
||||||
"lint": "eslint .",
|
"lint": "eslint .",
|
||||||
"postinstall": "npm run convert",
|
"postinstall": "nuxi prepare && npm run convert",
|
||||||
"preview": "vite preview",
|
|
||||||
"preview-https": "serve dist",
|
"preview-https": "serve dist",
|
||||||
"test": "vitest",
|
"test": "vitest",
|
||||||
"typecheck": "vue-tsc --noEmit"
|
"typecheck": "vue-tsc --noEmit"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@gtm-support/vue-gtm": "^1.6.0",
|
"vue-about-me": "^1.2.7"
|
||||||
"@vueuse/core": "^10.1.2",
|
|
||||||
"@vueuse/head": "^1.1.26",
|
|
||||||
"nprogress": "^0.2.0",
|
|
||||||
"pinia": "^2.1.3",
|
|
||||||
"prism-theme-vars": "^0.2.4",
|
|
||||||
"vue": "^3.3.4",
|
|
||||||
"vue-about-me": "^1.2.7",
|
|
||||||
"vue-demi": "^0.14.5",
|
|
||||||
"vue-router": "^4.2.1"
|
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@antfu/eslint-config": "^0.39.3",
|
"@antfu/eslint-config": "^0.39.8",
|
||||||
|
"@iconify-json/carbon": "^1.1.18",
|
||||||
"@iconify-json/fe": "^1.1.6",
|
"@iconify-json/fe": "^1.1.6",
|
||||||
"@iconify-json/gg": "^1.1.4",
|
"@iconify-json/gg": "^1.1.5",
|
||||||
"@iconify-json/ic": "^1.1.13",
|
"@iconify-json/ic": "^1.1.13",
|
||||||
"@iconify-json/mdi": "^1.1.52",
|
"@iconify-json/mdi": "^1.1.53",
|
||||||
"@iconify-json/ri": "^1.1.9",
|
"@iconify-json/ri": "^1.1.10",
|
||||||
"@pinia/testing": "^0.1.2",
|
"@iconify-json/twemoji": "^1.1.11",
|
||||||
"@types/markdown-it-link-attributes": "^3.0.1",
|
"@nuxt/content": "^2.7.2",
|
||||||
"@types/nprogress": "^0.2.0",
|
"@nuxt/devtools": "^0.6.7",
|
||||||
"@vitejs/plugin-legacy": "^4.0.4",
|
"@nuxtjs/color-mode": "^3.3.0",
|
||||||
"@vitejs/plugin-vue": "^4.2.3",
|
"@pinia/nuxt": "^0.4.11",
|
||||||
"@vue/test-utils": "^2.3.2",
|
"@pinia/testing": "^0.1.3",
|
||||||
"consola": "^3.1.0",
|
"@unocss/eslint-config": "^0.53.5",
|
||||||
"critters": "^0.0.17",
|
"@unocss/nuxt": "^0.53.5",
|
||||||
|
"@vite-pwa/nuxt": "^0.1.0",
|
||||||
|
"@vue/test-utils": "^2.4.1",
|
||||||
|
"@vueuse/nuxt": "^10.2.1",
|
||||||
|
"@zadigetvoltaire/nuxt-gtm": "^0.0.13",
|
||||||
|
"consola": "^3.2.3",
|
||||||
"cross-env": "^7.0.3",
|
"cross-env": "^7.0.3",
|
||||||
"eslint": "^8.41.0",
|
"eslint": "^8.45.0",
|
||||||
"https-localhost": "^4.7.1",
|
"nuxt": "^3.6.3",
|
||||||
"markdown-it-link-attributes": "^4.0.1",
|
"pinia": "^2.1.4",
|
||||||
"markdown-it-prism": "^2.3.0",
|
"sass": "^1.64.1",
|
||||||
"pnpm": "^8.5.1",
|
|
||||||
"sass": "^1.62.1",
|
|
||||||
"star-markdown-css": "^0.4.2",
|
"star-markdown-css": "^0.4.2",
|
||||||
"terser": "^5.17.6",
|
|
||||||
"tsx": "^3.12.7",
|
"tsx": "^3.12.7",
|
||||||
"typescript": "^5.0.4",
|
"typescript": "^5.1.6",
|
||||||
"unocss": "^0.52.4",
|
"unocss": "^0.54.0",
|
||||||
"unplugin-auto-import": "^0.16.2",
|
"vitest": "^0.33.0",
|
||||||
"unplugin-vue-components": "^0.24.1",
|
"vue-tsc": "^1.8.8"
|
||||||
"vite": "^4.3.9",
|
|
||||||
"vite-plugin-inspect": "^0.7.28",
|
|
||||||
"vite-plugin-pages": "^0.30.1",
|
|
||||||
"vite-plugin-vue-layouts": "^0.8.0",
|
|
||||||
"vite-plugin-vue-markdown": "^0.23.5",
|
|
||||||
"vite-ssg": "0.22.2",
|
|
||||||
"vite-ssg-sitemap": "^0.5.1",
|
|
||||||
"vitest": "^0.31.1",
|
|
||||||
"vue-toastification": "^2.0.0-rc.5",
|
|
||||||
"vue-tsc": "^1.6.5"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,9 +7,9 @@ const router = useRouter()
|
|||||||
<div text-4xl>
|
<div text-4xl>
|
||||||
<div i-ri-error-warning-line inline-block />
|
<div i-ri-error-warning-line inline-block />
|
||||||
</div>
|
</div>
|
||||||
<RouterView />
|
<div>菜谱消失了</div>
|
||||||
<div>
|
<div>
|
||||||
<button btn text-sm m="3 t8" @click="router.back()">
|
<button text-sm btn m="3 t8" @click="router.back()">
|
||||||
返回
|
返回
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
8
pages/[...slug].vue
Normal file
8
pages/[...slug].vue
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<template>
|
||||||
|
<main class="markdown-body text-left">
|
||||||
|
<ContentDoc v-slot="{ doc }">
|
||||||
|
<h1>{{ doc.title }}</h1>
|
||||||
|
<ContentRenderer :value="doc" />
|
||||||
|
</ContentDoc>
|
||||||
|
</main>
|
||||||
|
</template>
|
||||||
@@ -1,6 +1,4 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { useRecipeStore } from '~/store/recipe'
|
|
||||||
|
|
||||||
const rStore = useRecipeStore()
|
const rStore = useRecipeStore()
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@@ -8,7 +6,7 @@ const rStore = useRecipeStore()
|
|||||||
<div>
|
<div>
|
||||||
<div text-4xl m="t-4">
|
<div text-4xl m="t-4">
|
||||||
<button
|
<button
|
||||||
class="cursor-pointer transition hover:(text-green-600) active:text-green-800"
|
class="cursor-pointer transition active:text-green-800 hover:(text-green-600)"
|
||||||
title="重置"
|
title="重置"
|
||||||
@click="rStore.reset"
|
@click="rStore.reset"
|
||||||
>
|
>
|
||||||
@@ -19,8 +17,6 @@ const rStore = useRecipeStore()
|
|||||||
<p text="sm" m="b-4">
|
<p text="sm" m="b-4">
|
||||||
好的,今天我们来做菜!
|
好的,今天我们来做菜!
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<ChooseFood />
|
||||||
<ChooseFood />
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
9888
pnpm-lock.yaml
generated
9888
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
2
public/robots.txt
Normal file
2
public/robots.txt
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
User-agent: *
|
||||||
|
Allow: /
|
||||||
@@ -3,11 +3,11 @@ import fs from 'node:fs'
|
|||||||
import path from 'node:path'
|
import path from 'node:path'
|
||||||
import url from 'node:url'
|
import url from 'node:url'
|
||||||
import consola from 'consola'
|
import consola from 'consola'
|
||||||
import type { Recipe, RecipeItem } from '~/types'
|
import type { Recipe, RecipeItem } from '../types'
|
||||||
|
|
||||||
const __dirname = url.fileURLToPath(new URL('.', import.meta.url))
|
const __dirname = url.fileURLToPath(new URL('.', import.meta.url))
|
||||||
const recipeCsvFile = path.resolve(__dirname, '../src/data/recipe.csv')
|
const recipeCsvFile = path.resolve(__dirname, '../data/recipe.csv')
|
||||||
const recipeJsonFile = path.resolve(__dirname, '../src/data/recipe.json')
|
const recipeJsonFile = path.resolve(__dirname, '../data/recipe.json')
|
||||||
|
|
||||||
function run() {
|
function run() {
|
||||||
const csvData = fs.readFileSync(recipeCsvFile, 'utf-8')
|
const csvData = fs.readFileSync(recipeCsvFile, 'utf-8')
|
||||||
|
|||||||
7
server/api/pageview.ts
Normal file
7
server/api/pageview.ts
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
const startAt = Date.now()
|
||||||
|
let count = 0
|
||||||
|
|
||||||
|
export default defineEventHandler(() => ({
|
||||||
|
pageview: count++,
|
||||||
|
startAt,
|
||||||
|
}))
|
||||||
3
server/tsconfig.json
Normal file
3
server/tsconfig.json
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"extends": "../.nuxt/tsconfig.server.json"
|
||||||
|
}
|
||||||
0
src/shims.d.ts → shims.d.ts
vendored
0
src/shims.d.ts → shims.d.ts
vendored
898
src/auto-imports.d.ts
vendored
898
src/auto-imports.d.ts
vendored
@@ -1,898 +0,0 @@
|
|||||||
/* eslint-disable */
|
|
||||||
/* prettier-ignore */
|
|
||||||
// @ts-nocheck
|
|
||||||
// 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 createReusableTemplate: typeof import('@vueuse/core')['createReusableTemplate']
|
|
||||||
const createSharedComposable: typeof import('@vueuse/core')['createSharedComposable']
|
|
||||||
const createTemplatePromise: typeof import('@vueuse/core')['createTemplatePromise']
|
|
||||||
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 onBeforeRouteLeave: typeof import('vue-router')['onBeforeRouteLeave']
|
|
||||||
const onBeforeRouteUpdate: typeof import('vue-router')['onBeforeRouteUpdate']
|
|
||||||
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 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 toValue: typeof import('vue')['toValue']
|
|
||||||
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 useAnimate: typeof import('@vueuse/core')['useAnimate']
|
|
||||||
const useAppStore: typeof import('./store/app')['useAppStore']
|
|
||||||
const useArrayDifference: typeof import('@vueuse/core')['useArrayDifference']
|
|
||||||
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 useArrayFindLast: typeof import('@vueuse/core')['useArrayFindLast']
|
|
||||||
const useArrayIncludes: typeof import('@vueuse/core')['useArrayIncludes']
|
|
||||||
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 useArrayUnique: typeof import('@vueuse/core')['useArrayUnique']
|
|
||||||
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 useCloned: typeof import('@vueuse/core')['useCloned']
|
|
||||||
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 useEmojiAnimation: typeof import('./composables/animation')['useEmojiAnimation']
|
|
||||||
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 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 useInvisibleElement: typeof import('./composables/helper')['useInvisibleElement']
|
|
||||||
const useKeyModifier: typeof import('@vueuse/core')['useKeyModifier']
|
|
||||||
const useLastChanged: typeof import('@vueuse/core')['useLastChanged']
|
|
||||||
const useLink: typeof import('vue-router')['useLink']
|
|
||||||
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 useParentElement: typeof import('@vueuse/core')['useParentElement']
|
|
||||||
const usePerformanceObserver: typeof import('@vueuse/core')['usePerformanceObserver']
|
|
||||||
const usePermission: typeof import('@vueuse/core')['usePermission']
|
|
||||||
const usePointer: typeof import('@vueuse/core')['usePointer']
|
|
||||||
const usePointerLock: typeof import('@vueuse/core')['usePointerLock']
|
|
||||||
const usePointerSwipe: typeof import('@vueuse/core')['usePointerSwipe']
|
|
||||||
const usePreferredColorScheme: typeof import('@vueuse/core')['usePreferredColorScheme']
|
|
||||||
const usePreferredContrast: typeof import('@vueuse/core')['usePreferredContrast']
|
|
||||||
const usePreferredDark: typeof import('@vueuse/core')['usePreferredDark']
|
|
||||||
const usePreferredLanguages: typeof import('@vueuse/core')['usePreferredLanguages']
|
|
||||||
const usePreferredReducedMotion: typeof import('@vueuse/core')['usePreferredReducedMotion']
|
|
||||||
const usePrevious: typeof import('@vueuse/core')['usePrevious']
|
|
||||||
const useRafFn: typeof import('@vueuse/core')['useRafFn']
|
|
||||||
const useRecipe: typeof import('./composables/recipe')['useRecipe']
|
|
||||||
const useRecipeStore: typeof import('./store/recipe')['useRecipeStore']
|
|
||||||
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 useSeoMeta: typeof import('@vueuse/head')['useSeoMeta']
|
|
||||||
const useSessionStorage: typeof import('@vueuse/core')['useSessionStorage']
|
|
||||||
const useShare: typeof import('@vueuse/core')['useShare']
|
|
||||||
const useSlots: typeof import('vue')['useSlots']
|
|
||||||
const useSorted: typeof import('@vueuse/core')['useSorted']
|
|
||||||
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 watchDeep: typeof import('@vueuse/core')['watchDeep']
|
|
||||||
const watchEffect: typeof import('vue')['watchEffect']
|
|
||||||
const watchIgnorable: typeof import('@vueuse/core')['watchIgnorable']
|
|
||||||
const watchImmediate: typeof import('@vueuse/core')['watchImmediate']
|
|
||||||
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 type re-export
|
|
||||||
declare global {
|
|
||||||
// @ts-ignore
|
|
||||||
export type { Component, ComponentPublicInstance, ComputedRef, InjectionKey, PropType, Ref, VNode } from 'vue'
|
|
||||||
}
|
|
||||||
// for vue template auto import
|
|
||||||
import { UnwrapRef } from 'vue'
|
|
||||||
declare module 'vue' {
|
|
||||||
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 createReusableTemplate: UnwrapRef<typeof import('@vueuse/core')['createReusableTemplate']>
|
|
||||||
readonly createSharedComposable: UnwrapRef<typeof import('@vueuse/core')['createSharedComposable']>
|
|
||||||
readonly createTemplatePromise: UnwrapRef<typeof import('@vueuse/core')['createTemplatePromise']>
|
|
||||||
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 onBeforeRouteLeave: UnwrapRef<typeof import('vue-router')['onBeforeRouteLeave']>
|
|
||||||
readonly onBeforeRouteUpdate: UnwrapRef<typeof import('vue-router')['onBeforeRouteUpdate']>
|
|
||||||
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 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 toValue: UnwrapRef<typeof import('vue')['toValue']>
|
|
||||||
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 useAnimate: UnwrapRef<typeof import('@vueuse/core')['useAnimate']>
|
|
||||||
readonly useAppStore: UnwrapRef<typeof import('./store/app')['useAppStore']>
|
|
||||||
readonly useArrayDifference: UnwrapRef<typeof import('@vueuse/core')['useArrayDifference']>
|
|
||||||
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 useArrayFindLast: UnwrapRef<typeof import('@vueuse/core')['useArrayFindLast']>
|
|
||||||
readonly useArrayIncludes: UnwrapRef<typeof import('@vueuse/core')['useArrayIncludes']>
|
|
||||||
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 useArrayUnique: UnwrapRef<typeof import('@vueuse/core')['useArrayUnique']>
|
|
||||||
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 useCloned: UnwrapRef<typeof import('@vueuse/core')['useCloned']>
|
|
||||||
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 useEmojiAnimation: UnwrapRef<typeof import('./composables/animation')['useEmojiAnimation']>
|
|
||||||
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 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 useInvisibleElement: UnwrapRef<typeof import('./composables/helper')['useInvisibleElement']>
|
|
||||||
readonly useKeyModifier: UnwrapRef<typeof import('@vueuse/core')['useKeyModifier']>
|
|
||||||
readonly useLastChanged: UnwrapRef<typeof import('@vueuse/core')['useLastChanged']>
|
|
||||||
readonly useLink: UnwrapRef<typeof import('vue-router')['useLink']>
|
|
||||||
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 useParentElement: UnwrapRef<typeof import('@vueuse/core')['useParentElement']>
|
|
||||||
readonly usePerformanceObserver: UnwrapRef<typeof import('@vueuse/core')['usePerformanceObserver']>
|
|
||||||
readonly usePermission: UnwrapRef<typeof import('@vueuse/core')['usePermission']>
|
|
||||||
readonly usePointer: UnwrapRef<typeof import('@vueuse/core')['usePointer']>
|
|
||||||
readonly usePointerLock: UnwrapRef<typeof import('@vueuse/core')['usePointerLock']>
|
|
||||||
readonly usePointerSwipe: UnwrapRef<typeof import('@vueuse/core')['usePointerSwipe']>
|
|
||||||
readonly usePreferredColorScheme: UnwrapRef<typeof import('@vueuse/core')['usePreferredColorScheme']>
|
|
||||||
readonly usePreferredContrast: UnwrapRef<typeof import('@vueuse/core')['usePreferredContrast']>
|
|
||||||
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 usePrevious: UnwrapRef<typeof import('@vueuse/core')['usePrevious']>
|
|
||||||
readonly useRafFn: UnwrapRef<typeof import('@vueuse/core')['useRafFn']>
|
|
||||||
readonly useRecipe: UnwrapRef<typeof import('./composables/recipe')['useRecipe']>
|
|
||||||
readonly useRecipeStore: UnwrapRef<typeof import('./store/recipe')['useRecipeStore']>
|
|
||||||
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 useSeoMeta: UnwrapRef<typeof import('@vueuse/head')['useSeoMeta']>
|
|
||||||
readonly useSessionStorage: UnwrapRef<typeof import('@vueuse/core')['useSessionStorage']>
|
|
||||||
readonly useShare: UnwrapRef<typeof import('@vueuse/core')['useShare']>
|
|
||||||
readonly useSlots: UnwrapRef<typeof import('vue')['useSlots']>
|
|
||||||
readonly useSorted: UnwrapRef<typeof import('@vueuse/core')['useSorted']>
|
|
||||||
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 watchDeep: UnwrapRef<typeof import('@vueuse/core')['watchDeep']>
|
|
||||||
readonly watchEffect: UnwrapRef<typeof import('vue')['watchEffect']>
|
|
||||||
readonly watchIgnorable: UnwrapRef<typeof import('@vueuse/core')['watchIgnorable']>
|
|
||||||
readonly watchImmediate: UnwrapRef<typeof import('@vueuse/core')['watchImmediate']>
|
|
||||||
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']>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
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 createReusableTemplate: UnwrapRef<typeof import('@vueuse/core')['createReusableTemplate']>
|
|
||||||
readonly createSharedComposable: UnwrapRef<typeof import('@vueuse/core')['createSharedComposable']>
|
|
||||||
readonly createTemplatePromise: UnwrapRef<typeof import('@vueuse/core')['createTemplatePromise']>
|
|
||||||
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 onBeforeRouteLeave: UnwrapRef<typeof import('vue-router')['onBeforeRouteLeave']>
|
|
||||||
readonly onBeforeRouteUpdate: UnwrapRef<typeof import('vue-router')['onBeforeRouteUpdate']>
|
|
||||||
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 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 toValue: UnwrapRef<typeof import('vue')['toValue']>
|
|
||||||
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 useAnimate: UnwrapRef<typeof import('@vueuse/core')['useAnimate']>
|
|
||||||
readonly useAppStore: UnwrapRef<typeof import('./store/app')['useAppStore']>
|
|
||||||
readonly useArrayDifference: UnwrapRef<typeof import('@vueuse/core')['useArrayDifference']>
|
|
||||||
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 useArrayFindLast: UnwrapRef<typeof import('@vueuse/core')['useArrayFindLast']>
|
|
||||||
readonly useArrayIncludes: UnwrapRef<typeof import('@vueuse/core')['useArrayIncludes']>
|
|
||||||
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 useArrayUnique: UnwrapRef<typeof import('@vueuse/core')['useArrayUnique']>
|
|
||||||
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 useCloned: UnwrapRef<typeof import('@vueuse/core')['useCloned']>
|
|
||||||
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 useEmojiAnimation: UnwrapRef<typeof import('./composables/animation')['useEmojiAnimation']>
|
|
||||||
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 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 useInvisibleElement: UnwrapRef<typeof import('./composables/helper')['useInvisibleElement']>
|
|
||||||
readonly useKeyModifier: UnwrapRef<typeof import('@vueuse/core')['useKeyModifier']>
|
|
||||||
readonly useLastChanged: UnwrapRef<typeof import('@vueuse/core')['useLastChanged']>
|
|
||||||
readonly useLink: UnwrapRef<typeof import('vue-router')['useLink']>
|
|
||||||
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 useParentElement: UnwrapRef<typeof import('@vueuse/core')['useParentElement']>
|
|
||||||
readonly usePerformanceObserver: UnwrapRef<typeof import('@vueuse/core')['usePerformanceObserver']>
|
|
||||||
readonly usePermission: UnwrapRef<typeof import('@vueuse/core')['usePermission']>
|
|
||||||
readonly usePointer: UnwrapRef<typeof import('@vueuse/core')['usePointer']>
|
|
||||||
readonly usePointerLock: UnwrapRef<typeof import('@vueuse/core')['usePointerLock']>
|
|
||||||
readonly usePointerSwipe: UnwrapRef<typeof import('@vueuse/core')['usePointerSwipe']>
|
|
||||||
readonly usePreferredColorScheme: UnwrapRef<typeof import('@vueuse/core')['usePreferredColorScheme']>
|
|
||||||
readonly usePreferredContrast: UnwrapRef<typeof import('@vueuse/core')['usePreferredContrast']>
|
|
||||||
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 usePrevious: UnwrapRef<typeof import('@vueuse/core')['usePrevious']>
|
|
||||||
readonly useRafFn: UnwrapRef<typeof import('@vueuse/core')['useRafFn']>
|
|
||||||
readonly useRecipe: UnwrapRef<typeof import('./composables/recipe')['useRecipe']>
|
|
||||||
readonly useRecipeStore: UnwrapRef<typeof import('./store/recipe')['useRecipeStore']>
|
|
||||||
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 useSeoMeta: UnwrapRef<typeof import('@vueuse/head')['useSeoMeta']>
|
|
||||||
readonly useSessionStorage: UnwrapRef<typeof import('@vueuse/core')['useSessionStorage']>
|
|
||||||
readonly useShare: UnwrapRef<typeof import('@vueuse/core')['useShare']>
|
|
||||||
readonly useSlots: UnwrapRef<typeof import('vue')['useSlots']>
|
|
||||||
readonly useSorted: UnwrapRef<typeof import('@vueuse/core')['useSorted']>
|
|
||||||
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 watchDeep: UnwrapRef<typeof import('@vueuse/core')['watchDeep']>
|
|
||||||
readonly watchEffect: UnwrapRef<typeof import('vue')['watchEffect']>
|
|
||||||
readonly watchIgnorable: UnwrapRef<typeof import('@vueuse/core')['watchIgnorable']>
|
|
||||||
readonly watchImmediate: UnwrapRef<typeof import('@vueuse/core')['watchImmediate']>
|
|
||||||
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']>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
32
src/components.d.ts
vendored
32
src/components.d.ts
vendored
@@ -1,32 +0,0 @@
|
|||||||
/* eslint-disable */
|
|
||||||
/* prettier-ignore */
|
|
||||||
// @ts-nocheck
|
|
||||||
// Generated by unplugin-vue-components
|
|
||||||
// Read more: https://github.com/vuejs/core/pull/3399
|
|
||||||
import '@vue/runtime-core'
|
|
||||||
|
|
||||||
export {}
|
|
||||||
|
|
||||||
declare module '@vue/runtime-core' {
|
|
||||||
export interface GlobalComponents {
|
|
||||||
AboutMe: typeof import('./components/AboutMe.vue')['default']
|
|
||||||
BaseFooter: typeof import('./components/BaseFooter.vue')['default']
|
|
||||||
ChooseFood: typeof import('./components/ChooseFood.vue')['default']
|
|
||||||
Counter: typeof import('./components/Counter.vue')['default']
|
|
||||||
DishTag: typeof import('./components/tags/DishTag.vue')['default']
|
|
||||||
InstallPwa: typeof import('./components/InstallPwa.vue')['default']
|
|
||||||
MeatTag: typeof import('./components/tags/MeatTag.vue')['default']
|
|
||||||
Menu: typeof import('./components/Menu.vue')['default']
|
|
||||||
README: typeof import('./components/README.md')['default']
|
|
||||||
ReloadPrompt: typeof import('./components/ReloadPrompt.vue')['default']
|
|
||||||
RouterLink: typeof import('vue-router')['RouterLink']
|
|
||||||
RouterView: typeof import('vue-router')['RouterView']
|
|
||||||
SearchFoodInput: typeof import('./components/SearchFoodInput.vue')['default']
|
|
||||||
StapleTag: typeof import('./components/tags/StapleTag.vue')['default']
|
|
||||||
Switch: typeof import('./components/Switch.vue')['default']
|
|
||||||
ToggleMode: typeof import('./components/ToggleMode.vue')['default']
|
|
||||||
ToolTag: typeof import('./components/tags/ToolTag.vue')['default']
|
|
||||||
VegetableTag: typeof import('./components/tags/VegetableTag.vue')['default']
|
|
||||||
WrapperMd: typeof import('./components/WrapperMd.vue')['default']
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
<script setup lang="ts">
|
|
||||||
import { toggleDark } from '~/composables'
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<nav text-xl p="t-6">
|
|
||||||
<RouterLink class="icon-btn mx-2" to="/" title="首页">
|
|
||||||
<div i-ri-home-2-line />
|
|
||||||
</RouterLink>
|
|
||||||
|
|
||||||
<button class="icon-btn mx-2 hover:text-yellow-400 !outline-none" title="切换" @click="toggleDark()">
|
|
||||||
<div i="ri-sun-line dark:ri-moon-line" />
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<RouterLink class="icon-btn mx-2 hover:text-orange-400" to="/help" title="帮助">
|
|
||||||
<div i-ri-question-line />
|
|
||||||
</RouterLink>
|
|
||||||
|
|
||||||
<RouterLink class="icon-btn mx-2 hover:text-blue-400" to="/about" title="关于">
|
|
||||||
<div i-ri-information-line />
|
|
||||||
</RouterLink>
|
|
||||||
|
|
||||||
<a class="icon-btn mx-2 hover:text-pink-400" rel="noreferrer" href="https://space.bilibili.com/1579790" target="_blank" title="BiliBili">
|
|
||||||
<div i-ri-bilibili-line />
|
|
||||||
</a>
|
|
||||||
|
|
||||||
<a class="icon-btn mx-2 hover:text-black-400" rel="noreferrer" href="https://github.com/YunYouJun/cook" target="_blank" title="GitHub">
|
|
||||||
<div i-ri-github-line />
|
|
||||||
</a>
|
|
||||||
</nav>
|
|
||||||
</template>
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
// these APIs are auto-imported from @vueuse/core
|
|
||||||
export const isDark = useDark()
|
|
||||||
export const toggleDark = useToggle(isDark)
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
export * from './dark'
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
export * from './links'
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
## 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>
|
|
||||||
```
|
|
||||||
24
src/main.ts
24
src/main.ts
@@ -1,24 +0,0 @@
|
|||||||
import { ViteSSG } from 'vite-ssg'
|
|
||||||
import generatedRoutes from 'virtual:generated-pages'
|
|
||||||
import { setupLayouts } from 'virtual:generated-layouts'
|
|
||||||
import App from './App.vue'
|
|
||||||
|
|
||||||
import '@unocss/reset/tailwind.css'
|
|
||||||
import './styles/css-vars.scss'
|
|
||||||
import './styles/index.scss'
|
|
||||||
import 'uno.css'
|
|
||||||
|
|
||||||
import type { UserModule } from '~/types'
|
|
||||||
|
|
||||||
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))
|
|
||||||
},
|
|
||||||
)
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
## 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
|
|
||||||
}
|
|
||||||
```
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
import { createGtm } from '@gtm-support/vue-gtm'
|
|
||||||
import type { UserModule } from '~/types'
|
|
||||||
|
|
||||||
export const install: UserModule = ({ app }) => {
|
|
||||||
// add google tag manager, and add GA4 in gtag
|
|
||||||
app.use(createGtm({
|
|
||||||
id: 'GTM-5FJSV46',
|
|
||||||
// debug: import.meta.env.DEV,
|
|
||||||
}))
|
|
||||||
}
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
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()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
import { createPinia } from 'pinia'
|
|
||||||
import { type UserModule } from '~/types'
|
|
||||||
|
|
||||||
// Setup Pinia
|
|
||||||
// https://pinia.esm.dev/
|
|
||||||
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
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
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 })
|
|
||||||
})
|
|
||||||
}
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
// import Toast from 'vue-toastification'
|
|
||||||
import type { UserModule } from '~/types'
|
|
||||||
|
|
||||||
// import 'vue-toastification/dist/index.css'
|
|
||||||
|
|
||||||
export const install: UserModule = (_ctx) => {
|
|
||||||
// add google tag manager, and add GA4 in gtag
|
|
||||||
// app.use(Toast)
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div>
|
|
||||||
未找到页面
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<route lang="yaml">
|
|
||||||
meta:
|
|
||||||
layout: 404
|
|
||||||
</route>
|
|
||||||
@@ -1,51 +0,0 @@
|
|||||||
/* https://github.com/antfu/prism-theme-vars */
|
|
||||||
@use 'prism-theme-vars/base.css';
|
|
||||||
@use 'star-markdown-css/src/scss/theme/yun.scss';
|
|
||||||
|
|
||||||
html:not(.dark) .markdown-body {
|
|
||||||
--prism-foreground: #393a34;
|
|
||||||
--prism-background: #fbfbfb;
|
|
||||||
--prism-comment: #a0ada0;
|
|
||||||
--prism-string: #b56959;
|
|
||||||
--prism-literal: #2f8a89;
|
|
||||||
--prism-number: #296aa3;
|
|
||||||
--prism-keyword: #1c6b48;
|
|
||||||
--prism-function: #6c7834;
|
|
||||||
--prism-boolean: #1c6b48;
|
|
||||||
--prism-constant: #a65e2b;
|
|
||||||
--prism-deleted: #a14f55;
|
|
||||||
--prism-class: #2993a3;
|
|
||||||
--prism-builtin: #ab5959;
|
|
||||||
--prism-property: #b58451;
|
|
||||||
--prism-namespace: #b05a78;
|
|
||||||
--prism-punctuation: #8e8f8b;
|
|
||||||
--prism-decorator: #bd8f8f;
|
|
||||||
--prism-regex: #ab5e3f;
|
|
||||||
--prism-json-property: #698c96;
|
|
||||||
}
|
|
||||||
|
|
||||||
html.dark .markdown-body {
|
|
||||||
--prism-foreground: #d4cfbf;
|
|
||||||
--prism-background: #151515;
|
|
||||||
--prism-comment: #758575;
|
|
||||||
--prism-string: #d48372;
|
|
||||||
--prism-literal: #429988;
|
|
||||||
--prism-keyword: #4d9375;
|
|
||||||
--prism-boolean: #1c6b48;
|
|
||||||
--prism-number: #6394bf;
|
|
||||||
--prism-variable: #c2b36e;
|
|
||||||
--prism-function: #a1b567;
|
|
||||||
--prism-deleted: #a14f55;
|
|
||||||
--prism-class: #54b1bf;
|
|
||||||
--prism-builtin: #e0a569;
|
|
||||||
--prism-property: #dd8e6e;
|
|
||||||
--prism-namespace: #db889a;
|
|
||||||
--prism-punctuation: #858585;
|
|
||||||
--prism-decorator: #bd8f8f;
|
|
||||||
--prism-regex: #ab5e3f;
|
|
||||||
--prism-json-property: #6b8b9e;
|
|
||||||
--prism-line-number: #888888;
|
|
||||||
--prism-line-number-gutter: #eeeeee;
|
|
||||||
--prism-line-highlight-background: #444444;
|
|
||||||
--prism-selection-background: #444444;
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
import { type ViteSSGContext } from 'vite-ssg'
|
|
||||||
|
|
||||||
export type UserModule = (ctx: ViteSSGContext) => void
|
|
||||||
|
|
||||||
export * from './recipe'
|
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
@import './animation.scss';
|
@use './animation.scss';
|
||||||
@import './markdown.scss';
|
// markdown
|
||||||
|
@use './markdown.scss';
|
||||||
|
|
||||||
html,
|
html,
|
||||||
body,
|
body,
|
||||||
7
styles/markdown.scss
Normal file
7
styles/markdown.scss
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
@use 'star-markdown-css/src/scss/theme/yun.scss';
|
||||||
|
|
||||||
|
.markdown-body {
|
||||||
|
li {
|
||||||
|
list-style: disc;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,7 +4,6 @@ import { describe, it } from 'vitest'
|
|||||||
|
|
||||||
// import { createTestingPinia } from '@pinia/testing'
|
// import { createTestingPinia } from '@pinia/testing'
|
||||||
// import ChooseFood from '../src/components/ChooseFood.vue'
|
// import ChooseFood from '../src/components/ChooseFood.vue'
|
||||||
// import { useRecipeStore } from '~/store/recipe'
|
|
||||||
|
|
||||||
describe('ChooseFood.vue', () => {
|
describe('ChooseFood.vue', () => {
|
||||||
it('should render', async () => {
|
it('should render', async () => {
|
||||||
|
|||||||
@@ -1,11 +1,10 @@
|
|||||||
import { beforeEach, describe, expect, it } from 'vitest'
|
import { beforeEach, describe, expect, it } from 'vitest'
|
||||||
import { createPinia, setActivePinia } from 'pinia'
|
import { createPinia, setActivePinia } from 'pinia'
|
||||||
import { useRecipe } from '~/composables/recipe'
|
import { useRecipe } from 'composables/recipe'
|
||||||
import type { Recipe } from '~/types'
|
import type { Recipes } from '~/types'
|
||||||
import recipeData from '~/data/recipe.json'
|
import recipeData from '~/data/recipe.json'
|
||||||
import { useRecipeStore } from '~/store/recipe'
|
|
||||||
|
|
||||||
const recipe = ref<Recipe>(recipeData as Recipe)
|
const recipe = ref<Recipes>(recipeData as Recipes)
|
||||||
|
|
||||||
describe('recipe interaction', () => {
|
describe('recipe interaction', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
|
|||||||
@@ -1,28 +1,3 @@
|
|||||||
{
|
{
|
||||||
"compilerOptions": {
|
"extends": "./.nuxt/tsconfig.json"
|
||||||
"baseUrl": ".",
|
|
||||||
"module": "ESNext",
|
|
||||||
"target": "ESNext",
|
|
||||||
"lib": ["DOM", "ESNext"],
|
|
||||||
"strict": true,
|
|
||||||
"esModuleInterop": true,
|
|
||||||
"jsx": "preserve",
|
|
||||||
"skipLibCheck": true,
|
|
||||||
"moduleResolution": "node",
|
|
||||||
"resolveJsonModule": true,
|
|
||||||
"noUnusedLocals": true,
|
|
||||||
"strictNullChecks": true,
|
|
||||||
"forceConsistentCasingInFileNames": true,
|
|
||||||
"types": [
|
|
||||||
"vitest",
|
|
||||||
"vite/client",
|
|
||||||
"vue/ref-macros",
|
|
||||||
"vite-plugin-pages/client",
|
|
||||||
"vite-plugin-vue-layouts/client"
|
|
||||||
],
|
|
||||||
"paths": {
|
|
||||||
"~/*": ["src/*"]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"exclude": ["dist", "node_modules", "cypress"]
|
|
||||||
}
|
}
|
||||||
|
|||||||
1
types/index.ts
Normal file
1
types/index.ts
Normal file
@@ -0,0 +1 @@
|
|||||||
|
export * from './recipe'
|
||||||
@@ -39,4 +39,4 @@ export interface RecipeItem {
|
|||||||
tools?: string[]
|
tools?: string[]
|
||||||
}
|
}
|
||||||
|
|
||||||
export type Recipe = RecipeItem[]
|
export type Recipes = RecipeItem[]
|
||||||
@@ -4,14 +4,13 @@ import {
|
|||||||
presetIcons,
|
presetIcons,
|
||||||
presetTypography,
|
presetTypography,
|
||||||
presetUno,
|
presetUno,
|
||||||
// presetWebFonts,
|
|
||||||
transformerDirectives,
|
transformerDirectives,
|
||||||
transformerVariantGroup,
|
transformerVariantGroup,
|
||||||
} from 'unocss'
|
} from 'unocss'
|
||||||
|
|
||||||
import { tools } from './src/data/food'
|
import { tools } from './data/food'
|
||||||
|
|
||||||
const safelist: string[] = []
|
const safelist: string[] = ['text-left']
|
||||||
|
|
||||||
tools.forEach((item) => {
|
tools.forEach((item) => {
|
||||||
if (item.icon)
|
if (item.icon)
|
||||||
@@ -29,24 +28,20 @@ export default defineConfig({
|
|||||||
presetAttributify(),
|
presetAttributify(),
|
||||||
presetIcons({
|
presetIcons({
|
||||||
scale: 1.2,
|
scale: 1.2,
|
||||||
warn: true,
|
|
||||||
}),
|
}),
|
||||||
presetTypography(),
|
presetTypography(),
|
||||||
// simplify size
|
|
||||||
// presetWebFonts({
|
|
||||||
// fonts: {
|
|
||||||
// serif: [
|
|
||||||
// {
|
|
||||||
// name: 'Noto Serif SC',
|
|
||||||
// weights: [900],
|
|
||||||
// },
|
|
||||||
// ],
|
|
||||||
// },
|
|
||||||
// }),
|
|
||||||
],
|
],
|
||||||
transformers: [
|
transformers: [
|
||||||
transformerDirectives(),
|
transformerDirectives(),
|
||||||
transformerVariantGroup(),
|
transformerVariantGroup(),
|
||||||
],
|
],
|
||||||
safelist,
|
safelist,
|
||||||
|
content: {
|
||||||
|
pipeline: {
|
||||||
|
include: [
|
||||||
|
'./**/*.vue',
|
||||||
|
'./content/**/*.md',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
})
|
})
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
import { isClient } from '@vueuse/core'
|
import { isClient } from '@vueuse/core'
|
||||||
import { useAppStore } from '~/store/app'
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* https://web.dev/customize-install/#detect-install
|
* https://web.dev/customize-install/#detect-install
|
||||||
146
vite.config.ts
146
vite.config.ts
@@ -1,146 +0,0 @@
|
|||||||
import path from 'node: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 Inspect from 'vite-plugin-inspect'
|
|
||||||
import Prism from 'markdown-it-prism'
|
|
||||||
import LinkAttributes from 'markdown-it-link-attributes'
|
|
||||||
import Unocss from 'unocss/vite'
|
|
||||||
|
|
||||||
import legacy from '@vitejs/plugin-legacy'
|
|
||||||
|
|
||||||
Object.assign(process.env, {
|
|
||||||
VITE_COMMIT_REF: process.env.CF_PAGES_COMMIT_SHA || '',
|
|
||||||
})
|
|
||||||
|
|
||||||
export default defineConfig({
|
|
||||||
resolve: {
|
|
||||||
alias: {
|
|
||||||
'~/': `${path.resolve(__dirname, 'src')}/`,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
plugins: [
|
|
||||||
legacy({
|
|
||||||
targets: ['defaults', 'not IE 11'],
|
|
||||||
}),
|
|
||||||
|
|
||||||
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/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
|
|
||||||
Markdown({
|
|
||||||
wrapperComponent: 'WrapperMd',
|
|
||||||
headEnabled: true,
|
|
||||||
markdownItSetup(md) {
|
|
||||||
// https://prismjs.com/
|
|
||||||
md.use(Prism)
|
|
||||||
md.use(LinkAttributes, {
|
|
||||||
matcher: (link: string) => /^https?:\/\//.test(link),
|
|
||||||
attrs: {
|
|
||||||
target: '_blank',
|
|
||||||
rel: 'noopener',
|
|
||||||
},
|
|
||||||
})
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
|
|
||||||
// // https://github.com/antfu/vite-plugin-pwa
|
|
||||||
// VitePWA({
|
|
||||||
// // use default prompt
|
|
||||||
// // registerType: 'autoUpdate',
|
|
||||||
// registerType: 'prompt',
|
|
||||||
// includeAssets: ['favicon.svg', 'safari-pinned-tab.svg'],
|
|
||||||
// manifest: {
|
|
||||||
// name: '今天我们来做菜',
|
|
||||||
// short_name: '来做菜',
|
|
||||||
// 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/antfu/vite-plugin-inspect
|
|
||||||
// Visit http://localhost:3333/__inspect/ to see the inspector
|
|
||||||
Inspect(),
|
|
||||||
],
|
|
||||||
|
|
||||||
// https://github.com/antfu/vite-ssg
|
|
||||||
ssgOptions: {
|
|
||||||
script: 'async',
|
|
||||||
formatting: 'minify',
|
|
||||||
onFinished() { generateSitemap() },
|
|
||||||
},
|
|
||||||
|
|
||||||
// https://github.com/vitest-dev/vitest
|
|
||||||
test: {
|
|
||||||
include: ['test/**/*.test.ts'],
|
|
||||||
environment: 'jsdom',
|
|
||||||
deps: {
|
|
||||||
inline: ['@vue', '@vueuse', 'vue-demi'],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
Reference in New Issue
Block a user