chore: cleanup codes

This commit is contained in:
Neko Ayaka
2024-12-11 14:42:45 +08:00
parent 8b250b3779
commit 19487acf42
19 changed files with 326 additions and 1838 deletions
-1
View File
@@ -17,7 +17,6 @@
document.documentElement.classList.toggle('dark', true)
})()
</script>
<script src="/assets/js/CubismSdkForWeb-5-r.1/Core/live2dcubismcore.min.js"></script>
</head>
<body class="font-sans">
<div id="app"></div>
@@ -1,14 +0,0 @@
button:
about: About
back: Back
go: GO
home: Home
toggle_dark: Toggle dark mode
toggle_langs: Change languages
intro:
desc: Opinionated Vite Starter Template
dynamic-route: Demo of dynamic route
hi: Hi, {name}!
aka: Also known as
whats-your-name: What's your name?
not-found: Not found
@@ -1,14 +0,0 @@
button:
about: 关于
back: 返回
go: 确定
home: 首页
toggle_dark: 切换深色模式
toggle_langs: 切换语言
intro:
desc: 固执己见的 Vite 项目模板
dynamic-route: 动态路由演示
hi: 你好,{name}
aka: 也叫
whats-your-name: 输入你的名字
not-found: 未找到页面
+1 -28
View File
@@ -18,41 +18,14 @@
"typecheck": "vue-tsc --noEmit"
},
"dependencies": {
"@unhead/vue": "^1.11.14",
"@unocss/reset": "^0.65.1",
"@vueuse/core": "^12.0.0",
"@vueuse/head": "^2.0.0",
"nprogress": "^0.2.0",
"ofetch": "^1.4.1",
"pinia": "^2.3.0",
"vue": "^3.5.13",
"vue-demi": "^0.14.10",
"vue-i18n": "^10.0.5",
"vue-router": "^4.5.0"
"vue": "^3.5.13"
},
"devDependencies": {
"@huggingface/transformers": "^3.1.2",
"@iconify-json/carbon": "^1.2.4",
"@iconify-json/eos-icons": "^1.2.1",
"@iconify-json/solar": "^1.2.1",
"@intlify/unplugin-vue-i18n": "^6.0.1",
"@shikijs/markdown-it": "^1.24.2",
"@types/markdown-it-link-attributes": "^3.0.5",
"@types/nprogress": "^0.2.3",
"@vitejs/plugin-vue": "^5.2.1",
"@vue-macros/volar": "^0.30.7",
"markdown-it-link-attributes": "^4.0.1",
"shiki": "^1.24.2",
"unplugin-auto-import": "^0.18.6",
"unplugin-vue-components": "^0.27.5",
"unplugin-vue-macros": "^2.13.5",
"unplugin-vue-markdown": "^0.27.1",
"unplugin-vue-router": "^0.10.9",
"vite-bundle-visualizer": "^1.2.1",
"vite-plugin-pwa": "^0.21.1",
"vite-plugin-vue-devtools": "^7.6.7",
"vite-plugin-vue-layouts": "^0.11.0",
"vite-plugin-webfont-dl": "^3.10.3",
"vue-tsc": "^2.1.10"
}
}
+255 -1
View File
@@ -1,3 +1,257 @@
<script setup lang="ts">
import type { MessageEvents, ProgressMessageEvents } from './libs/types'
import { useDevicesList, useScreenSafeArea, useUserMedia, useWebWorker } from '@vueuse/core'
import { computed, onUnmounted, ref, watch, watchEffect } from 'vue'
import AudioVisualizer from './components/AudioVisualizer.vue'
import Progress from './components/Progress.vue'
import WhisperLanguageSelect from './components/WhisperLanguageSelect.vue'
import Worker from './libs/worker?worker&url'
const IS_WEBGPU_AVAILABLE = !!(navigator as unknown as any).gpu
const WHISPER_SAMPLING_RATE = 16_000
const MAX_AUDIO_LENGTH = 30 // seconds
const MAX_SAMPLES = WHISPER_SAMPLING_RATE * MAX_AUDIO_LENGTH
const { top, right, bottom, left } = useScreenSafeArea()
const recorder = ref<MediaRecorder>()
const status = ref<'loading' | 'ready' | null>(null)
const loadingMessage = ref('')
const progressItems = ref<ProgressMessageEvents[]>([])
const text = ref('')
const tps = ref<number>()
const language = ref('en')
const recording = ref(false)
const isProcessing = ref(false)
const chunks = ref<Blob[]>([])
const audioContextRef = ref<AudioContext | null>(null)
const { post, data } = useWebWorker<MessageEvents>(Worker, { type: 'module' })
const { audioInputs } = useDevicesList({ constraints: { audio: true }, requestPermissions: true })
const selectedAudioInput = ref<ConstrainDOMString>()
const constraints = computed(() => ({ audio: { deviceId: selectedAudioInput.value } }))
const { stream } = useUserMedia({ constraints, enabled: true, autoSwitch: true })
watch(data, (e) => {
switch (e.status) {
case 'loading':
status.value = 'loading'
loadingMessage.value = e.data
break
case 'initiate':
progressItems.value.push(e)
break
case 'progress':
progressItems.value = progressItems.value.map((item) => {
if (item.file === e.file) {
return { ...item, ...e }
}
return item
})
break
case 'done':
progressItems.value = progressItems.value.filter(item => item.file !== e.file)
break
case 'ready':
status.value = 'ready'
recorder.value?.start()
break
case 'start':
isProcessing.value = true
recorder.value?.requestData()
break
case 'update':
tps.value = e.tps
break
case 'complete':
isProcessing.value = false
text.value = e.output[0] || ''
break
}
})
watch(stream, () => {
if (!stream.value)
return
recorder.value = new MediaRecorder(stream.value)
audioContextRef.value = new AudioContext({ sampleRate: WHISPER_SAMPLING_RATE })
recorder.value.onstart = () => {
recording.value = true
chunks.value = []
}
recorder.value.ondataavailable = (e) => {
if (e.data.size > 0) {
chunks.value.push(e.data)
}
else {
setTimeout(() => {
recorder.value?.requestData()
}, 25)
}
}
recorder.value.onstop = () => {
recording.value = false
}
})
watchEffect(() => {
if (!recorder.value)
return
if (!recording.value)
return
if (isProcessing.value)
return
if (status.value !== 'ready')
return
if (chunks.value.length > 0) {
const blob = new Blob(chunks.value, { type: recorder.value.mimeType })
const fileReader = new FileReader()
fileReader.onloadend = async () => {
const arrayBuffer = fileReader.result
const decoded = await audioContextRef.value?.decodeAudioData(arrayBuffer as ArrayBuffer)
let audio = decoded?.getChannelData(0)
if ((audio?.length || 0) > MAX_SAMPLES) {
audio = audio?.slice(-MAX_SAMPLES)
}
post({ type: 'generate', data: { audio, language: language.value } })
}
fileReader.readAsArrayBuffer(blob)
}
else {
recorder.value?.requestData()
}
})
watch([language], () => {
recorder.value?.stop()
recorder.value?.start()
})
function handleLoad() {
post({ type: 'load' })
status.value = 'loading'
}
function handleReset() {
recorder.value?.stop()
recorder.value?.start()
}
onUnmounted(() => {
recorder.value?.stop()
recorder.value = undefined
})
</script>
<template>
<RouterView />
<main
text="gray-700 dark:gray-200" h-full font-sans
:style="{
paddingTop: `${top}px`,
paddingRight: `${right}px`,
paddingBottom: `${bottom}px`,
paddingLeft: `${left}px`,
}"
>
<div h-full w-full>
<div v-if="IS_WEBGPU_AVAILABLE" class="mx-auto h-screen flex flex-col justify-end bg-white text-gray-800 dark:bg-gray-900 dark:text-gray-200">
<div class="scrollbar-thin relative h-full flex flex-col items-center justify-center overflow-auto">
<div class="mb-1 max-w-[400px] flex flex-col items-center text-center">
<img src="/logo.png" width="50%" height="auto" class="block">
<h1 class="mb-1 text-4xl font-bold">
Whisper WebGPU
</h1>
<h2 class="text-xl font-semibold">
Real-time in-browser speech recognition
</h2>
</div>
<div class="flex flex-col items-center px-4">
<template v-if="status === null">
<p class="mb-4 max-w-[480px]">
<br>
You are about to load <a href="https://huggingface.co/onnx-community/whisper-base" target="_blank" rel="noreferrer" class="font-medium underline">whisper-base</a>,
a 73 million parameter speech recognition model that is optimized for inference on the web. Once downloaded, the model (~200&nbsp;MB) will be cached and reused when you revisit the page.<br>
<br>
Everything runs directly in your browser using <a href="https://huggingface.co/docs/transformers.js" target="_blank" rel="noreferrer" class="underline">🤗&nbsp;Transformers.js</a> and ONNX Runtime Web,
meaning no data is sent to a server. You can even disconnect from the internet after the model has loaded!
</p>
<button
class="select-none border rounded-lg bg-blue-400 px-4 py-2 text-white disabled:cursor-not-allowed disabled:bg-blue-100 hover:bg-blue-500"
:disabled="status !== null"
@click="handleLoad"
>
<span>Load model</span>
</button>
</template>
<div class="w-[500px] p-2">
<AudioVisualizer class="w-full rounded-lg" :stream="stream" />
<div v-if="status === 'ready'" class="relative">
<p class="overflow-wrap-anywhere white h-[80px] w-full overflow-y-auto border rounded-lg p-2">
{{ text }}
</p>
<span v-if="tps" class="absolute bottom-0 right-0 px-1">{{ tps.toFixed(2) }} tok/s</span>
</div>
</div>
<div v-if="status === 'ready'" class="relative w-full flex justify-center">
<WhisperLanguageSelect v-model="language" />
<button class="absolute right-2 border rounded-lg px-2" @click="handleReset">
<span>Reset</span>
</button>
</div>
<div v-if="status === 'ready'" class="relative w-full flex flex-col justify-center">
<select v-model="selectedAudioInput" className="border rounded-lg p-2 max-w-[100px]">
<option disabled>
Select a Audio Input
</option>
<option v-for="input of audioInputs" :key="input.deviceId" :value="input.deviceId">
{{ input.label }}
</option>
</select>
</div>
<div v-if="status === 'loading'" class="mx-auto max-w-[500px] w-full p-4 text-left">
<p class="text-center">
{{ loadingMessage }}
</p>
<Progress
v-for="(item, index) of progressItems"
:key="index"
:text="item.file"
:percentage="item.progress || 0"
:total="item.total || 0"
/>
</div>
</div>
</div>
</div>
<div v-else class="fixed z-10 h-screen w-screen flex items-center justify-center bg-black bg-opacity-[92%] text-center text-2xl text-white font-semibold">
WebGPU is not supported<br>by this browser :&#40;
</div>
</div>
</main>
</template>
-608
View File
@@ -1,608 +0,0 @@
/* eslint-disable */
/* prettier-ignore */
// @ts-nocheck
// noinspection JSUnusedGlobalSymbols
// Generated by unplugin-auto-import
// biome-ignore lint: disable
export {}
declare global {
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 defineLoader: typeof import('vue-router/auto')['defineLoader']
const definePage: typeof import('unplugin-vue-router/runtime')['definePage']
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 injectLocal: typeof import('@vueuse/core')['injectLocal']
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 onWatcherCleanup: typeof import('vue')['onWatcherCleanup']
const pausableWatch: typeof import('@vueuse/core')['pausableWatch']
const preferredDark: typeof import('./composables/dark')['preferredDark']
const provide: typeof import('vue')['provide']
const provideLocal: typeof import('@vueuse/core')['provideLocal']
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 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 useAudioContext: typeof import('./stores/audio')['useAudioContext']
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 useClipboardItems: typeof import('@vueuse/core')['useClipboardItems']
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 useDelayMessageQueue: typeof import('./composables/queues')['useDelayMessageQueue']
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 useEmotionsMessageQueue: typeof import('./composables/queues')['useEmotionsMessageQueue']
const useEventBus: typeof import('@vueuse/core')['useEventBus']
const useEventListener: typeof import('@vueuse/core')['useEventListener']
const useEventSource: typeof import('@vueuse/core')['useEventSource']
const useEyeDropper: typeof import('@vueuse/core')['useEyeDropper']
const useFavicon: typeof import('@vueuse/core')['useFavicon']
const useFetch: typeof import('@vueuse/core')['useFetch']
const useFileDialog: typeof import('@vueuse/core')['useFileDialog']
const useFileSystemAccess: typeof import('@vueuse/core')['useFileSystemAccess']
const useFocus: typeof import('@vueuse/core')['useFocus']
const useFocusWithin: typeof import('@vueuse/core')['useFocusWithin']
const useFps: typeof import('@vueuse/core')['useFps']
const useFullscreen: typeof import('@vueuse/core')['useFullscreen']
const useGamepad: typeof import('@vueuse/core')['useGamepad']
const useGeolocation: typeof import('@vueuse/core')['useGeolocation']
const useHead: typeof import('@vueuse/head')['useHead']
const useI18n: typeof import('vue-i18n')['useI18n']
const useId: typeof import('vue')['useId']
const useIdle: typeof import('@vueuse/core')['useIdle']
const useImage: typeof import('@vueuse/core')['useImage']
const useInfiniteScroll: typeof import('@vueuse/core')['useInfiniteScroll']
const useIntersectionObserver: typeof import('@vueuse/core')['useIntersectionObserver']
const useInterval: typeof import('@vueuse/core')['useInterval']
const useIntervalFn: typeof import('@vueuse/core')['useIntervalFn']
const useKeyModifier: typeof import('@vueuse/core')['useKeyModifier']
const useLLM: typeof import('./stores/llm')['useLLM']
const useLastChanged: typeof import('@vueuse/core')['useLastChanged']
const useLink: typeof import('vue-router/auto')['useLink']
const useLlmmarkerParser: typeof import('./composables/llmmarkerParser')['useLlmmarkerParser']
const useLocalStorage: typeof import('@vueuse/core')['useLocalStorage']
const useMagicKeys: typeof import('@vueuse/core')['useMagicKeys']
const useManualRefHistory: typeof import('@vueuse/core')['useManualRefHistory']
const useMarkdown: typeof import('./composables/markdown')['useMarkdown']
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 useMessageContentQueue: typeof import('./composables/queues')['useMessageContentQueue']
const useModel: typeof import('vue')['useModel']
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 useQueue: typeof import('./composables/queue')['useQueue']
const useRafFn: typeof import('@vueuse/core')['useRafFn']
const useRefHistory: typeof import('@vueuse/core')['useRefHistory']
const useResizeObserver: typeof import('@vueuse/core')['useResizeObserver']
const useRoute: typeof import('vue-router')['useRoute']
const useRouter: typeof import('vue-router')['useRouter']
const useScreenOrientation: typeof import('@vueuse/core')['useScreenOrientation']
const useScreenSafeArea: typeof import('@vueuse/core')['useScreenSafeArea']
const useScriptTag: typeof import('@vueuse/core')['useScriptTag']
const useScroll: typeof import('@vueuse/core')['useScroll']
const useScrollLock: typeof import('@vueuse/core')['useScrollLock']
const useSeoMeta: typeof import('@vueuse/head')['useSeoMeta']
const useSessionStorage: typeof import('@vueuse/core')['useSessionStorage']
const useSettings: typeof import('./stores/settings')['useSettings']
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 useTemplateRef: typeof import('vue')['useTemplateRef']
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('./stores/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, DirectiveBinding, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, MaybeRef, MaybeRefOrGetter, VNode, WritableComputedRef } from 'vue'
import('vue')
}
// for vue template auto import
import { UnwrapRef } from 'vue'
declare module 'vue' {
interface GlobalComponents {}
interface ComponentCustomProperties {
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 injectLocal: UnwrapRef<typeof import('@vueuse/core')['injectLocal']>
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 onWatcherCleanup: UnwrapRef<typeof import('vue')['onWatcherCleanup']>
readonly pausableWatch: UnwrapRef<typeof import('@vueuse/core')['pausableWatch']>
readonly provide: UnwrapRef<typeof import('vue')['provide']>
readonly provideLocal: UnwrapRef<typeof import('@vueuse/core')['provideLocal']>
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 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 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 useClipboardItems: UnwrapRef<typeof import('@vueuse/core')['useClipboardItems']>
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 useEventBus: UnwrapRef<typeof import('@vueuse/core')['useEventBus']>
readonly useEventListener: UnwrapRef<typeof import('@vueuse/core')['useEventListener']>
readonly useEventSource: UnwrapRef<typeof import('@vueuse/core')['useEventSource']>
readonly useEyeDropper: UnwrapRef<typeof import('@vueuse/core')['useEyeDropper']>
readonly useFavicon: UnwrapRef<typeof import('@vueuse/core')['useFavicon']>
readonly useFetch: UnwrapRef<typeof import('@vueuse/core')['useFetch']>
readonly useFileDialog: UnwrapRef<typeof import('@vueuse/core')['useFileDialog']>
readonly useFileSystemAccess: UnwrapRef<typeof import('@vueuse/core')['useFileSystemAccess']>
readonly useFocus: UnwrapRef<typeof import('@vueuse/core')['useFocus']>
readonly useFocusWithin: UnwrapRef<typeof import('@vueuse/core')['useFocusWithin']>
readonly useFps: UnwrapRef<typeof import('@vueuse/core')['useFps']>
readonly useFullscreen: UnwrapRef<typeof import('@vueuse/core')['useFullscreen']>
readonly useGamepad: UnwrapRef<typeof import('@vueuse/core')['useGamepad']>
readonly useGeolocation: UnwrapRef<typeof import('@vueuse/core')['useGeolocation']>
readonly useHead: UnwrapRef<typeof import('@vueuse/head')['useHead']>
readonly useI18n: UnwrapRef<typeof import('vue-i18n')['useI18n']>
readonly useId: UnwrapRef<typeof import('vue')['useId']>
readonly useIdle: UnwrapRef<typeof import('@vueuse/core')['useIdle']>
readonly useImage: UnwrapRef<typeof import('@vueuse/core')['useImage']>
readonly useInfiniteScroll: UnwrapRef<typeof import('@vueuse/core')['useInfiniteScroll']>
readonly useIntersectionObserver: UnwrapRef<typeof import('@vueuse/core')['useIntersectionObserver']>
readonly useInterval: UnwrapRef<typeof import('@vueuse/core')['useInterval']>
readonly useIntervalFn: UnwrapRef<typeof import('@vueuse/core')['useIntervalFn']>
readonly useKeyModifier: UnwrapRef<typeof import('@vueuse/core')['useKeyModifier']>
readonly useLastChanged: UnwrapRef<typeof import('@vueuse/core')['useLastChanged']>
readonly useLink: UnwrapRef<typeof import('vue-router/auto')['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 useModel: UnwrapRef<typeof import('vue')['useModel']>
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 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 useTemplateRef: UnwrapRef<typeof import('vue')['useTemplateRef']>
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 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']>
}
}
@@ -1,5 +1,5 @@
<script setup lang="ts">
import { ref } from 'vue'
import { onMounted, ref, watch } from 'vue'
const props = defineProps<{
stream?: MediaStream
@@ -1,2 +0,0 @@
export const appName = 'Whisper Realtime (WebGPU) - Project アイリ'
export const appDescription = 'Whisper Realtime (WebGPU) - Project アイリ'
@@ -1,19 +0,0 @@
<script setup lang="ts">
import { useScreenSafeArea } from '@vueuse/core'
const { top, right, bottom, left } = useScreenSafeArea()
</script>
<template>
<main
text="gray-700 dark:gray-200" h-full font-sans
:style="{
paddingTop: `${top.value}px`,
paddingRight: `${right.value}px`,
paddingBottom: `${bottom.value}px`,
paddingLeft: `${left.value}px`,
}"
>
<RouterView />
</main>
</template>
@@ -0,0 +1,66 @@
export interface EventLoading {
status: 'loading'
data: string
}
export interface EventInitiate {
status: 'initiate'
name: string
file: string
// Not used
progress?: number
loaded?: number
total?: number
}
export interface EventDownload {
status: 'download'
name: string
file: string
// Not used
progress?: number
loaded?: number
total?: number
}
export interface EventProgress {
status: 'progress'
name: string
file: string
progress: number
loaded: number
total: number
}
export interface EventDone {
status: 'done'
name: string
file: string
// Not used
progress?: number
loaded?: number
total?: number
}
export interface EventReady {
status: 'ready'
}
export interface EventStart {
status: 'start'
}
export interface EventUpdate {
status: 'update'
tps: number
output: string
numTokens: number
}
export interface EventComplete {
status: 'complete'
output: string[]
}
export type MessageEvents = EventLoading | EventInitiate | EventDownload | EventProgress | EventDone | EventReady | EventStart | EventUpdate | EventComplete
export type ProgressMessageEvents = EventInitiate | EventProgress | EventDone
+1 -30
View File
@@ -1,39 +1,10 @@
import Tres from '@tresjs/core'
import NProgress from 'nprogress'
import { createPinia } from 'pinia'
import { setupLayouts } from 'virtual:generated-layouts'
import { createRouter, createWebHistory } from 'vue-router'
import { routes } from 'vue-router/auto-routes'
import { createApp } from 'vue'
import App from './App.vue'
import i18n from './modules/i18n'
import '@unocss/reset/tailwind.css'
import './styles/main.css'
import 'uno.css'
const pinia = createPinia()
const router = createRouter({ routes: setupLayouts(routes), history: createWebHistory() })
router.beforeEach((to, from) => {
if (to.path !== from.path)
NProgress.start()
})
router.afterEach(() => {
NProgress.done()
})
router.isReady()
.then(async () => {
const { registerSW } = await import('virtual:pwa-register')
registerSW({ immediate: true })
})
.catch(() => { })
createApp(App)
.use(router)
.use(pinia)
.use(i18n)
.use(Tres)
.mount('#app')
@@ -1,52 +0,0 @@
import type { Plugin } from 'vue'
import type { Locale } from 'vue-i18n'
import { createI18n } from 'vue-i18n'
// Import i18n resources
// https://vitejs.dev/guide/features.html#glob-import
//
// Don't need this? Try vitesse-lite: https://github.com/antfu/vitesse-lite
const i18n = createI18n({
legacy: false,
locale: '',
messages: {},
})
const localesMap = Object.fromEntries(
Object.entries(import.meta.glob('../../locales/*.yml'))
.map(([path, loadLocale]) => [path.match(/([\w-]*)\.yml$/)?.[1], loadLocale]),
) as Record<Locale, () => Promise<{ default: Record<string, string> }>>
export const availableLocales = Object.keys(localesMap)
const loadedLanguages: string[] = []
function setI18nLanguage(lang: Locale) {
i18n.global.locale.value = lang as any
if (typeof document !== 'undefined')
document.querySelector('html')?.setAttribute('lang', lang)
return lang
}
export async function loadLanguageAsync(lang: string): Promise<Locale> {
// If the same language
if (i18n.global.locale.value === lang)
return setI18nLanguage(lang)
// If the language was already loaded
if (loadedLanguages.includes(lang))
return setI18nLanguage(lang)
// If the language hasn't been loaded yet
const messages = await localesMap[lang]()
i18n.global.setLocaleMessage(lang, messages.default)
loadedLanguages.push(lang)
return setI18nLanguage(lang)
}
export default {
install: (app) => {
app.use(i18n)
loadLanguageAsync('en')
},
} satisfies Plugin
@@ -1,311 +0,0 @@
<script setup lang="ts">
import { useDevicesList, useUserMedia, useWebWorker } from '@vueuse/core'
import { reactive } from 'vue'
import AudioVisualizer from '../components/AudioVisualizer.vue'
import Progress from '../components/Progress.vue'
import WhisperLanguageSelect from '../components/WhisperLanguageSelect.vue'
import Worker from '../libs/worker?worker&url'
const IS_WEBGPU_AVAILABLE = !!(navigator as unknown as any).gpu
const WHISPER_SAMPLING_RATE = 16_000
const MAX_AUDIO_LENGTH = 30 // seconds
const MAX_SAMPLES = WHISPER_SAMPLING_RATE * MAX_AUDIO_LENGTH
const recorder = ref<MediaRecorder>()
const status = ref<'loading' | 'ready' | null>(null)
const loadingMessage = ref('')
const progressItems = ref<ProgressMessageEvents[]>([])
const text = ref('')
const tps = ref<number>()
const language = ref('en')
const recording = ref(false)
const isProcessing = ref(false)
const chunks = ref<Blob[]>([])
const audioContextRef = ref<AudioContext | null>(null)
interface EventLoading {
status: 'loading'
data: string
}
interface EventInitiate {
status: 'initiate'
name: string
file: string
// Not used
progress?: number
loaded?: number
total?: number
}
interface EventDownload {
status: 'download'
name: string
file: string
// Not used
progress?: number
loaded?: number
total?: number
}
interface EventProgress {
status: 'progress'
name: string
file: string
progress: number
loaded: number
total: number
}
interface EventDone {
status: 'done'
name: string
file: string
// Not used
progress?: number
loaded?: number
total?: number
}
interface EventReady {
status: 'ready'
}
interface EventStart {
status: 'start'
}
interface EventUpdate {
status: 'update'
tps: number
output: string
numTokens: number
}
interface EventComplete {
status: 'complete'
output: string[]
}
type MessageEvents = EventLoading | EventInitiate | EventDownload | EventProgress | EventDone | EventReady | EventStart | EventUpdate | EventComplete
type ProgressMessageEvents = EventInitiate | EventProgress | EventDone
const { post, data } = useWebWorker<MessageEvents>(Worker, { type: 'module' })
const { audioInputs } = useDevicesList({ constraints: { audio: true }, requestPermissions: true })
const constraints = reactive({ audio: { deviceId: '' } })
const { stream } = useUserMedia({ constraints, enabled: true, autoSwitch: true })
watch(data, (e) => {
switch (e.status) {
case 'loading':
status.value = 'loading'
loadingMessage.value = e.data
break
case 'initiate':
progressItems.value.push(e)
break
case 'progress':
progressItems.value = progressItems.value.map((item) => {
if (item.file === e.file) {
return { ...item, ...e }
}
return item
})
break
case 'done':
progressItems.value = progressItems.value.filter(item => item.file !== e.file)
break
case 'ready':
status.value = 'ready'
recorder.value?.start()
break
case 'start':
isProcessing.value = true
recorder.value?.requestData()
break
case 'update':
tps.value = e.tps
break
case 'complete':
isProcessing.value = false
text.value = e.output[0] || ''
break
}
})
watch(stream, () => {
if (!stream.value)
return
recorder.value = new MediaRecorder(stream.value)
audioContextRef.value = new AudioContext({ sampleRate: WHISPER_SAMPLING_RATE })
recorder.value.onstart = () => {
recording.value = true
chunks.value = []
}
recorder.value.ondataavailable = (e) => {
if (e.data.size > 0) {
chunks.value.push(e.data)
}
else {
setTimeout(() => {
recorder.value?.requestData()
}, 25)
}
}
recorder.value.onstop = () => {
recording.value = false
}
})
watchEffect(() => {
if (!recorder.value)
return
if (!recording.value)
return
if (isProcessing.value)
return
if (status.value !== 'ready')
return
if (chunks.value.length > 0) {
const blob = new Blob(chunks.value, { type: recorder.value.mimeType })
const fileReader = new FileReader()
fileReader.onloadend = async () => {
const arrayBuffer = fileReader.result
const decoded = await audioContextRef.value?.decodeAudioData(arrayBuffer as ArrayBuffer)
let audio = decoded?.getChannelData(0)
if ((audio?.length || 0) > MAX_SAMPLES) {
audio = audio?.slice(-MAX_SAMPLES)
}
post({ type: 'generate', data: { audio, language: language.value } })
}
fileReader.readAsArrayBuffer(blob)
}
else {
recorder.value?.requestData()
}
})
watch([language], () => {
recorder.value?.stop()
recorder.value?.start()
})
function handleLoad() {
post({ type: 'load' })
status.value = 'loading'
}
function handleReset() {
recorder.value?.stop()
recorder.value?.start()
}
onUnmounted(() => {
recorder.value?.stop()
recorder.value = undefined
})
</script>
<template>
<div h-full w-full>
<div v-if="IS_WEBGPU_AVAILABLE" class="mx-auto h-screen flex flex-col justify-end bg-white text-gray-800 dark:bg-gray-900 dark:text-gray-200">
<div class="scrollbar-thin relative h-full flex flex-col items-center justify-center overflow-auto">
<div class="mb-1 max-w-[400px] flex flex-col items-center text-center">
<img src="/logo.png" width="50%" height="auto" class="block">
<h1 class="mb-1 text-4xl font-bold">
Whisper WebGPU
</h1>
<h2 class="text-xl font-semibold">
Real-time in-browser speech recognition
</h2>
</div>
<div class="flex flex-col items-center px-4">
<template v-if="status === null">
<p class="mb-4 max-w-[480px]">
<br>
You are about to load <a href="https://huggingface.co/onnx-community/whisper-base" target="_blank" rel="noreferrer" class="font-medium underline">whisper-base</a>,
a 73 million parameter speech recognition model that is optimized for inference on the web. Once downloaded, the model (~200&nbsp;MB) will be cached and reused when you revisit the page.<br>
<br>
Everything runs directly in your browser using <a href="https://huggingface.co/docs/transformers.js" target="_blank" rel="noreferrer" class="underline">🤗&nbsp;Transformers.js</a> and ONNX Runtime Web,
meaning no data is sent to a server. You can even disconnect from the internet after the model has loaded!
</p>
<button
class="select-none border rounded-lg bg-blue-400 px-4 py-2 text-white disabled:cursor-not-allowed disabled:bg-blue-100 hover:bg-blue-500"
:disabled="status !== null"
@click="handleLoad"
>
<span>Load model</span>
</button>
</template>
<div class="w-[500px] p-2">
<AudioVisualizer class="w-full rounded-lg" :stream="stream" />
<div v-if="status === 'ready'" class="relative">
<p class="overflow-wrap-anywhere white h-[80px] w-full overflow-y-auto border rounded-lg p-2">
{{ text }}
</p>
<span v-if="tps" class="absolute bottom-0 right-0 px-1">{{ tps.toFixed(2) }} tok/s</span>
</div>
</div>
<div v-if="status === 'ready'" class="relative w-full flex justify-center">
<WhisperLanguageSelect v-model="language" />
<button class="absolute right-2 border rounded-lg px-2" @click="handleReset">
<span>Reset</span>
</button>
</div>
<div v-if="status === 'ready'" class="relative w-full flex flex-col justify-center">
<div v-for="input of audioInputs" :key="input.deviceId">
<input :id="input.deviceId" v-model="constraints.audio.deviceId" type="radio" name="audioInput" :value="input.deviceId">
<label :for="input.deviceId">{{ input.label }}</label>
</div>
</div>
<div v-if="status === 'loading'" class="mx-auto max-w-[500px] w-full p-4 text-left">
<p class="text-center">
{{ loadingMessage }}
</p>
<Progress
v-for="(item, index) of progressItems"
:key="index"
:text="item.file"
:percentage="item.progress || 0"
:total="item.total || 0"
/>
</div>
</div>
</div>
</div>
<div v-else class="fixed z-10 h-screen w-screen flex items-center justify-center bg-black bg-opacity-[92%] text-center text-2xl text-white font-semibold">
WebGPU is not supported<br>by this browser :&#40;
</div>
</div>
</template>
<route lang="yaml">
meta:
layout: default
</route>
-8
View File
@@ -2,14 +2,6 @@ declare interface Window {
// extend the window
}
// with unplugin-vue-markdown, markdown files can be treated as Vue components
declare module '*.md' {
import type { DefineComponent } from 'vue'
const component: DefineComponent<object, object, any>
export default component
}
declare module '*.vue' {
import type { DefineComponent } from 'vue'
-15
View File
@@ -11,21 +11,6 @@ html.dark {
color-scheme: dark;
}
#nprogress {
pointer-events: none;
}
#nprogress .bar {
background: rgb(13, 148, 136);
opacity: 0.75;
position: fixed;
z-index: 1031;
top: 0;
left: 0;
width: 100%;
height: 2px;
}
.scrollbar-thin::-webkit-scrollbar {
@apply w-2;
}
-23
View File
@@ -1,23 +0,0 @@
/* eslint-disable */
/* prettier-ignore */
// @ts-nocheck
// Generated by unplugin-vue-router. ‼️ DO NOT MODIFY THIS FILE ‼️
// It's recommended to commit this file.
// Make sure to add this file to your tsconfig.json file as an "includes" or "files" entry.
declare module 'vue-router/auto-routes' {
import type {
RouteRecordInfo,
ParamValue,
ParamValueOneOrMore,
ParamValueZeroOrMore,
ParamValueZeroOrOne,
} from 'vue-router'
/**
* Route name map generated by unplugin-vue-router
*/
export interface RouteNamedMap {
'/': RouteRecordInfo<'/', '/', Record<never, never>, Record<never, never>>,
}
}
+1 -11
View File
@@ -12,11 +12,7 @@
"resolveJsonModule": true,
"types": [
"vitest",
"vite/client",
"vite-plugin-vue-layouts/client",
"vite-plugin-pwa/client",
"unplugin-vue-macros/macros-global",
"unplugin-vue-router/client"
"vite/client"
],
"allowJs": true,
"strict": true,
@@ -28,11 +24,5 @@
"isolatedModules": true,
"skipLibCheck": true
},
"vueCompilerOptions": {
"plugins": [
"@vue-macros/volar/define-models",
"@vue-macros/volar/define-slots"
]
},
"exclude": ["dist", "node_modules", "cypress"]
}
+1 -112
View File
@@ -1,123 +1,12 @@
import path from 'node:path'
import VueI18n from '@intlify/unplugin-vue-i18n/vite'
import { templateCompilerOptions } from '@tresjs/core'
import Vue from '@vitejs/plugin-vue'
import Unocss from 'unocss/vite'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import VueMacros from 'unplugin-vue-macros/vite'
import { VueRouterAutoImports } from 'unplugin-vue-router'
import VueRouter from 'unplugin-vue-router/vite'
import { defineConfig } from 'vite'
import { VitePWA } from 'vite-plugin-pwa'
import VueDevTools from 'vite-plugin-vue-devtools'
import Layouts from 'vite-plugin-vue-layouts'
import WebfontDownload from 'vite-plugin-webfont-dl'
import { appName } from './src/constants'
export default defineConfig({
optimizeDeps: {
exclude: [
'public/assets/*',
],
},
resolve: {
alias: {
'~/': `${path.resolve(__dirname, 'src')}/`,
},
},
plugins: [
VueMacros({
plugins: {
vue: Vue({
include: [/\.vue$/, /\.md$/],
...templateCompilerOptions,
}),
},
}),
// https://github.com/posva/unplugin-vue-router
VueRouter({
extensions: ['.vue', '.md'],
dts: path.resolve(__dirname, 'src/typed-router.d.ts'),
}),
// https://github.com/JohnCampionJr/vite-plugin-vue-layouts
Layouts(),
// https://github.com/antfu/unplugin-auto-import
AutoImport({
imports: [
'vue',
'vue-i18n',
'@vueuse/head',
'@vueuse/core',
VueRouterAutoImports,
{
// add any other imports you were relying on
'vue-router/auto': ['useLink'],
},
],
dts: 'src/auto-imports.d.ts',
dirs: [
'src/composables',
'src/stores',
],
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',
}),
Vue(),
// https://github.com/antfu/unocss
// see uno.config.ts for config
Unocss(),
// https://github.com/antfu/vite-plugin-pwa
VitePWA({
registerType: 'autoUpdate',
includeAssets: ['favicon.svg', 'apple-touch-icon.png'],
manifest: {
name: appName,
short_name: appName,
theme_color: '#ffffff',
icons: [
{
src: '/web-app-manifest-192x192.png',
sizes: '192x192',
type: 'image/png',
},
{
src: '/web-app-manifest-512x512.png',
sizes: '512x512',
type: 'image/png',
},
],
},
}),
// https://github.com/intlify/bundle-tools/tree/main/packages/unplugin-vue-i18n
VueI18n({
runtimeOnly: true,
compositionOnly: true,
fullInstall: true,
include: [path.resolve(__dirname, 'locales/**')],
}),
// https://github.com/feat-agency/vite-plugin-webfont-dl
WebfontDownload(),
// https://github.com/webfansplz/vite-plugin-vue-devtools
VueDevTools(),
],
})
-588
View File
@@ -313,106 +313,25 @@ importers:
packages/stt-realtime-webgpu:
dependencies:
'@unhead/vue':
specifier: ^1.11.14
version: 1.11.14(vue@3.5.13(typescript@5.7.2))
'@unocss/reset':
specifier: ^0.65.1
version: 0.65.1
'@vueuse/core':
specifier: ^12.0.0
version: 12.0.0(typescript@5.7.2)
'@vueuse/head':
specifier: ^2.0.0
version: 2.0.0(vue@3.5.13(typescript@5.7.2))
nprogress:
specifier: ^0.2.0
version: 0.2.0
ofetch:
specifier: ^1.4.1
version: 1.4.1
pinia:
specifier: ^2.3.0
version: 2.3.0(typescript@5.7.2)(vue@3.5.13(typescript@5.7.2))
vue:
specifier: ^3.5.13
version: 3.5.13(typescript@5.7.2)
vue-demi:
specifier: ^0.14.10
version: 0.14.10(vue@3.5.13(typescript@5.7.2))
vue-i18n:
specifier: ^10.0.5
version: 10.0.5(vue@3.5.13(typescript@5.7.2))
vue-router:
specifier: ^4.5.0
version: 4.5.0(vue@3.5.13(typescript@5.7.2))
devDependencies:
'@huggingface/transformers':
specifier: ^3.1.2
version: 3.1.2
'@iconify-json/carbon':
specifier: ^1.2.4
version: 1.2.4
'@iconify-json/eos-icons':
specifier: ^1.2.1
version: 1.2.1
'@iconify-json/solar':
specifier: ^1.2.1
version: 1.2.1
'@intlify/unplugin-vue-i18n':
specifier: ^6.0.1
version: 6.0.1(@vue/compiler-dom@3.5.13)(eslint@9.16.0(jiti@2.4.0))(rollup@4.28.1)(typescript@5.7.2)(vue-i18n@10.0.5(vue@3.5.13(typescript@5.7.2)))(vue@3.5.13(typescript@5.7.2))
'@shikijs/markdown-it':
specifier: ^1.24.2
version: 1.24.2
'@types/markdown-it-link-attributes':
specifier: ^3.0.5
version: 3.0.5
'@types/nprogress':
specifier: ^0.2.3
version: 0.2.3
'@vitejs/plugin-vue':
specifier: ^5.2.1
version: 5.2.1(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.0)(terser@5.17.6)(tsx@4.19.2)(yaml@2.6.1))(vue@3.5.13(typescript@5.7.2))
'@vue-macros/volar':
specifier: ^0.30.7
version: 0.30.7(rollup@4.28.1)(typescript@5.7.2)(vue-tsc@2.1.10(typescript@5.7.2))(vue@3.5.13(typescript@5.7.2))
markdown-it-link-attributes:
specifier: ^4.0.1
version: 4.0.1
shiki:
specifier: ^1.24.2
version: 1.24.2
unplugin-auto-import:
specifier: ^0.18.6
version: 0.18.6(@vueuse/core@12.0.0(typescript@5.7.2))(rollup@4.28.1)
unplugin-vue-components:
specifier: ^0.27.5
version: 0.27.5(@babel/parser@7.26.2)(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
unplugin-vue-macros:
specifier: ^2.13.5
version: 2.13.5(@vueuse/core@12.0.0(typescript@5.7.2))(esbuild@0.24.0)(rollup@4.28.1)(typescript@5.7.2)(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.0)(terser@5.17.6)(tsx@4.19.2)(yaml@2.6.1))(vue-tsc@2.1.10(typescript@5.7.2))(vue@3.5.13(typescript@5.7.2))
unplugin-vue-markdown:
specifier: ^0.27.1
version: 0.27.1(rollup@4.28.1)(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.0)(terser@5.17.6)(tsx@4.19.2)(yaml@2.6.1))
unplugin-vue-router:
specifier: ^0.10.9
version: 0.10.9(rollup@4.28.1)(vue-router@4.5.0(vue@3.5.13(typescript@5.7.2)))(vue@3.5.13(typescript@5.7.2))
vite-bundle-visualizer:
specifier: ^1.2.1
version: 1.2.1(rollup@4.28.1)
vite-plugin-pwa:
specifier: ^0.21.1
version: 0.21.1(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.0)(terser@5.17.6)(tsx@4.19.2)(yaml@2.6.1))(workbox-build@7.3.0)(workbox-window@7.3.0)
vite-plugin-vue-devtools:
specifier: ^7.6.7
version: 7.6.7(rollup@4.28.1)(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.0)(terser@5.17.6)(tsx@4.19.2)(yaml@2.6.1))(vue@3.5.13(typescript@5.7.2))
vite-plugin-vue-layouts:
specifier: ^0.11.0
version: 0.11.0(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.0)(terser@5.17.6)(tsx@4.19.2)(yaml@2.6.1))(vue-router@4.5.0(vue@3.5.13(typescript@5.7.2)))(vue@3.5.13(typescript@5.7.2))
vite-plugin-webfont-dl:
specifier: ^3.10.3
version: 3.10.3(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.0)(terser@5.17.6)(tsx@4.19.2)(yaml@2.6.1))
vue-tsc:
specifier: ^2.1.10
version: 2.1.10(typescript@5.7.2)
@@ -8709,33 +8628,6 @@ snapshots:
- supports-color
- typescript
'@intlify/unplugin-vue-i18n@6.0.1(@vue/compiler-dom@3.5.13)(eslint@9.16.0(jiti@2.4.0))(rollup@4.28.1)(typescript@5.7.2)(vue-i18n@10.0.5(vue@3.5.13(typescript@5.7.2)))(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@eslint-community/eslint-utils': 4.4.1(eslint@9.16.0(jiti@2.4.0))
'@intlify/bundle-utils': 10.0.0(vue-i18n@10.0.5(vue@3.5.13(typescript@5.7.2)))
'@intlify/shared': 10.0.5
'@intlify/vue-i18n-extensions': 7.0.0(@intlify/shared@10.0.5)(@vue/compiler-dom@3.5.13)(vue-i18n@10.0.5(vue@3.5.13(typescript@5.7.2)))(vue@3.5.13(typescript@5.7.2))
'@rollup/pluginutils': 5.1.3(rollup@4.28.1)
'@typescript-eslint/scope-manager': 8.16.0
'@typescript-eslint/typescript-estree': 8.16.0(typescript@5.7.2)
debug: 4.3.7
fast-glob: 3.3.2
js-yaml: 4.1.0
json5: 2.2.3
pathe: 1.1.2
picocolors: 1.1.1
source-map-js: 1.2.1
unplugin: 1.16.0
vue: 3.5.13(typescript@5.7.2)
optionalDependencies:
vue-i18n: 10.0.5(vue@3.5.13(typescript@5.7.2))
transitivePeerDependencies:
- '@vue/compiler-dom'
- eslint
- rollup
- supports-color
- typescript
'@intlify/vue-i18n-extensions@7.0.0(@intlify/shared@10.0.5)(@vue/compiler-dom@3.5.13)(vue-i18n@10.0.5(vue@3.5.13(typescript@5.7.2)))(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@babel/parser': 7.26.2
@@ -9765,15 +9657,6 @@ snapshots:
- rollup
- vue
'@vue-macros/api@0.13.0(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@babel/types': 7.26.0
'@vue-macros/common': 1.15.0(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
oxc-resolver: 2.0.1
transitivePeerDependencies:
- rollup
- vue
'@vue-macros/better-define@1.11.0(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/api': 0.13.0(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))
@@ -9783,15 +9666,6 @@ snapshots:
- rollup
- vue
'@vue-macros/better-define@1.11.0(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/api': 0.13.0(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
'@vue-macros/common': 1.15.0(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
unplugin: 1.16.0
transitivePeerDependencies:
- rollup
- vue
'@vue-macros/boolean-prop@0.5.2(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/common': 1.15.0(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))
@@ -9800,14 +9674,6 @@ snapshots:
- rollup
- vue
'@vue-macros/boolean-prop@0.5.2(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/common': 1.15.0(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
'@vue/compiler-core': 3.5.13
transitivePeerDependencies:
- rollup
- vue
'@vue-macros/chain-call@0.4.2(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/common': 1.15.0(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))
@@ -9816,14 +9682,6 @@ snapshots:
- rollup
- vue
'@vue-macros/chain-call@0.4.2(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/common': 1.15.0(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
unplugin: 1.16.0
transitivePeerDependencies:
- rollup
- vue
'@vue-macros/common@1.15.0(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@babel/types': 7.26.0
@@ -9837,19 +9695,6 @@ snapshots:
transitivePeerDependencies:
- rollup
'@vue-macros/common@1.15.0(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@babel/types': 7.26.0
'@rollup/pluginutils': 5.1.3(rollup@4.28.1)
'@vue/compiler-sfc': 3.5.13
ast-kit: 1.3.1
local-pkg: 0.5.1
magic-string-ast: 0.6.2
optionalDependencies:
vue: 3.5.13(typescript@5.7.2)
transitivePeerDependencies:
- rollup
'@vue-macros/config@0.5.0(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/common': 1.15.0(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))
@@ -9860,16 +9705,6 @@ snapshots:
- supports-color
- vue
'@vue-macros/config@0.5.0(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/common': 1.15.0(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
make-synchronized: 0.2.9
unconfig: 0.6.0
transitivePeerDependencies:
- rollup
- supports-color
- vue
'@vue-macros/define-emit@0.5.1(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/common': 1.15.0(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))
@@ -9878,14 +9713,6 @@ snapshots:
transitivePeerDependencies:
- rollup
'@vue-macros/define-emit@0.5.1(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/common': 1.15.0(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
unplugin: 1.16.0
vue: 3.5.13(typescript@5.7.2)
transitivePeerDependencies:
- rollup
'@vue-macros/define-models@1.3.2(@vueuse/core@12.0.0(typescript@5.7.2))(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/common': 1.15.0(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))
@@ -9897,17 +9724,6 @@ snapshots:
- rollup
- vue
'@vue-macros/define-models@1.3.2(@vueuse/core@12.0.0(typescript@5.7.2))(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/common': 1.15.0(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
ast-walker-scope: 0.6.2
unplugin: 1.16.0
optionalDependencies:
'@vueuse/core': 12.0.0(typescript@5.7.2)
transitivePeerDependencies:
- rollup
- vue
'@vue-macros/define-prop@0.6.1(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/api': 0.13.0(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))
@@ -9917,15 +9733,6 @@ snapshots:
transitivePeerDependencies:
- rollup
'@vue-macros/define-prop@0.6.1(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/api': 0.13.0(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
'@vue-macros/common': 1.15.0(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
unplugin: 1.16.0
vue: 3.5.13(typescript@5.7.2)
transitivePeerDependencies:
- rollup
'@vue-macros/define-props-refs@1.3.2(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/common': 1.15.0(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))
@@ -9934,14 +9741,6 @@ snapshots:
transitivePeerDependencies:
- rollup
'@vue-macros/define-props-refs@1.3.2(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/common': 1.15.0(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
unplugin: 1.16.0
vue: 3.5.13(typescript@5.7.2)
transitivePeerDependencies:
- rollup
'@vue-macros/define-props@4.0.3(@vue-macros/reactivity-transform@1.1.3(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2)))(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/common': 1.15.0(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))
@@ -9951,15 +9750,6 @@ snapshots:
transitivePeerDependencies:
- rollup
'@vue-macros/define-props@4.0.3(@vue-macros/reactivity-transform@1.1.3(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2)))(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/common': 1.15.0(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
'@vue-macros/reactivity-transform': 1.1.3(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
unplugin: 1.16.0
vue: 3.5.13(typescript@5.7.2)
transitivePeerDependencies:
- rollup
'@vue-macros/define-render@1.6.2(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/common': 1.15.0(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))
@@ -9968,14 +9758,6 @@ snapshots:
transitivePeerDependencies:
- rollup
'@vue-macros/define-render@1.6.2(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/common': 1.15.0(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
unplugin: 1.16.0
vue: 3.5.13(typescript@5.7.2)
transitivePeerDependencies:
- rollup
'@vue-macros/define-slots@1.2.2(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/common': 1.15.0(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))
@@ -9984,14 +9766,6 @@ snapshots:
transitivePeerDependencies:
- rollup
'@vue-macros/define-slots@1.2.2(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/common': 1.15.0(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
unplugin: 1.16.0
vue: 3.5.13(typescript@5.7.2)
transitivePeerDependencies:
- rollup
'@vue-macros/define-stylex@0.2.0(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/common': 1.15.0(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))
@@ -10001,15 +9775,6 @@ snapshots:
- rollup
- vue
'@vue-macros/define-stylex@0.2.0(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/common': 1.15.0(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
'@vue/compiler-dom': 3.5.13
unplugin: 1.16.0
transitivePeerDependencies:
- rollup
- vue
'@vue-macros/devtools@0.4.0(typescript@5.7.2)(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.0)(terser@5.17.6)(tsx@4.19.2)(yaml@2.6.1))':
dependencies:
sirv: 2.0.4
@@ -10028,15 +9793,6 @@ snapshots:
transitivePeerDependencies:
- rollup
'@vue-macros/export-expose@0.3.2(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/common': 1.15.0(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
'@vue/compiler-sfc': 3.5.13
unplugin: 1.16.0
vue: 3.5.13(typescript@5.7.2)
transitivePeerDependencies:
- rollup
'@vue-macros/export-props@0.6.2(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/common': 1.15.0(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))
@@ -10045,14 +9801,6 @@ snapshots:
transitivePeerDependencies:
- rollup
'@vue-macros/export-props@0.6.2(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/common': 1.15.0(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
unplugin: 1.16.0
vue: 3.5.13(typescript@5.7.2)
transitivePeerDependencies:
- rollup
'@vue-macros/export-render@0.3.2(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/common': 1.15.0(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))
@@ -10061,14 +9809,6 @@ snapshots:
transitivePeerDependencies:
- rollup
'@vue-macros/export-render@0.3.2(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/common': 1.15.0(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
unplugin: 1.16.0
vue: 3.5.13(typescript@5.7.2)
transitivePeerDependencies:
- rollup
'@vue-macros/hoist-static@1.6.2(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/common': 1.15.0(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))
@@ -10077,14 +9817,6 @@ snapshots:
- rollup
- vue
'@vue-macros/hoist-static@1.6.2(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/common': 1.15.0(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
unplugin: 1.16.0
transitivePeerDependencies:
- rollup
- vue
'@vue-macros/jsx-directive@0.9.3(rollup@2.79.1)(typescript@5.7.2)':
dependencies:
'@vue-macros/common': 1.15.0(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))
@@ -10094,15 +9826,6 @@ snapshots:
- rollup
- typescript
'@vue-macros/jsx-directive@0.9.3(rollup@4.28.1)(typescript@5.7.2)':
dependencies:
'@vue-macros/common': 1.15.0(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
unplugin: 1.16.0
vue: 3.5.13(typescript@5.7.2)
transitivePeerDependencies:
- rollup
- typescript
'@vue-macros/named-template@0.5.2(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/common': 1.15.0(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))
@@ -10112,15 +9835,6 @@ snapshots:
- rollup
- vue
'@vue-macros/named-template@0.5.2(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/common': 1.15.0(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
'@vue/compiler-dom': 3.5.13
unplugin: 1.16.0
transitivePeerDependencies:
- rollup
- vue
'@vue-macros/reactivity-transform@1.1.3(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@babel/parser': 7.26.2
@@ -10133,18 +9847,6 @@ snapshots:
transitivePeerDependencies:
- rollup
'@vue-macros/reactivity-transform@1.1.3(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@babel/parser': 7.26.2
'@vue-macros/common': 1.15.0(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
'@vue/compiler-core': 3.5.13
'@vue/shared': 3.5.13
magic-string: 0.30.14
unplugin: 1.16.0
vue: 3.5.13(typescript@5.7.2)
transitivePeerDependencies:
- rollup
'@vue-macros/script-lang@0.2.2(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/common': 1.15.0(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))
@@ -10153,14 +9855,6 @@ snapshots:
transitivePeerDependencies:
- rollup
'@vue-macros/script-lang@0.2.2(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/common': 1.15.0(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
unplugin: 1.16.0
vue: 3.5.13(typescript@5.7.2)
transitivePeerDependencies:
- rollup
'@vue-macros/setup-block@0.4.2(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/common': 1.15.0(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))
@@ -10170,15 +9864,6 @@ snapshots:
- rollup
- vue
'@vue-macros/setup-block@0.4.2(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/common': 1.15.0(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
'@vue/compiler-dom': 3.5.13
unplugin: 1.16.0
transitivePeerDependencies:
- rollup
- vue
'@vue-macros/setup-component@0.18.2(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/common': 1.15.0(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))
@@ -10187,14 +9872,6 @@ snapshots:
- rollup
- vue
'@vue-macros/setup-component@0.18.2(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/common': 1.15.0(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
unplugin: 1.16.0
transitivePeerDependencies:
- rollup
- vue
'@vue-macros/setup-sfc@0.18.2(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/common': 1.15.0(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))
@@ -10203,14 +9880,6 @@ snapshots:
- rollup
- vue
'@vue-macros/setup-sfc@0.18.2(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/common': 1.15.0(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
unplugin: 1.16.0
transitivePeerDependencies:
- rollup
- vue
'@vue-macros/short-bind@1.1.2(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/common': 1.15.0(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))
@@ -10219,14 +9888,6 @@ snapshots:
- rollup
- vue
'@vue-macros/short-bind@1.1.2(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/common': 1.15.0(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
'@vue/compiler-core': 3.5.13
transitivePeerDependencies:
- rollup
- vue
'@vue-macros/short-emits@1.6.2(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/common': 1.15.0(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))
@@ -10235,14 +9896,6 @@ snapshots:
- rollup
- vue
'@vue-macros/short-emits@1.6.2(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/common': 1.15.0(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
unplugin: 1.16.0
transitivePeerDependencies:
- rollup
- vue
'@vue-macros/short-vmodel@1.5.2(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/common': 1.15.0(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))
@@ -10251,14 +9904,6 @@ snapshots:
- rollup
- vue
'@vue-macros/short-vmodel@1.5.2(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/common': 1.15.0(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
'@vue/compiler-core': 3.5.13
transitivePeerDependencies:
- rollup
- vue
'@vue-macros/volar@0.30.7(rollup@2.79.1)(typescript@5.7.2)(vue-tsc@2.1.10(typescript@5.7.2))(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/boolean-prop': 0.5.2(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))
@@ -10277,24 +9922,6 @@ snapshots:
- typescript
- vue
'@vue-macros/volar@0.30.7(rollup@4.28.1)(typescript@5.7.2)(vue-tsc@2.1.10(typescript@5.7.2))(vue@3.5.13(typescript@5.7.2))':
dependencies:
'@vue-macros/boolean-prop': 0.5.2(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
'@vue-macros/common': 1.15.0(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
'@vue-macros/config': 0.5.0(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
'@vue-macros/short-bind': 1.1.2(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
'@vue-macros/short-vmodel': 1.5.2(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
'@vue/language-core': 2.1.10(typescript@5.7.2)
muggle-string: 0.4.1
ts-macro: 0.1.10(rollup@4.28.1)(typescript@5.7.2)
optionalDependencies:
vue-tsc: 2.1.10(typescript@5.7.2)
transitivePeerDependencies:
- rollup
- supports-color
- typescript
- vue
'@vue/babel-helper-vue-transform-on@1.1.5': {}
'@vue/babel-plugin-jsx@1.1.5(@babel/core@7.25.2)':
@@ -13865,15 +13492,6 @@ snapshots:
optionalDependencies:
rollup: 2.79.1
rollup-plugin-visualizer@5.11.0(rollup@4.28.1):
dependencies:
open: 8.4.2
picomatch: 2.3.1
source-map: 0.7.4
yargs: 17.7.2
optionalDependencies:
rollup: 4.28.1
rollup-pluginutils@2.8.2:
dependencies:
estree-walker: 0.6.1
@@ -14479,16 +14097,6 @@ snapshots:
- rollup
- typescript
ts-macro@0.1.10(rollup@4.28.1)(typescript@5.7.2):
dependencies:
'@rollup/pluginutils': 5.1.3(rollup@4.28.1)
'@volar/language-core': 2.4.10
'@vue/language-core': 2.1.10(typescript@5.7.2)
muggle-string: 0.4.1
transitivePeerDependencies:
- rollup
- typescript
tslib@2.8.1: {}
tsx@4.19.2:
@@ -14668,25 +14276,6 @@ snapshots:
transitivePeerDependencies:
- rollup
unimport@3.14.2(rollup@4.28.1):
dependencies:
'@rollup/pluginutils': 5.1.3(rollup@4.28.1)
acorn: 8.14.0
escape-string-regexp: 5.0.0
estree-walker: 3.0.3
local-pkg: 0.5.1
magic-string: 0.30.14
mlly: 1.7.3
pathe: 1.1.2
picomatch: 4.0.2
pkg-types: 1.2.1
scule: 1.3.0
strip-literal: 2.1.1
tinyglobby: 0.2.10
unplugin: 1.16.0
transitivePeerDependencies:
- rollup
unique-string@2.0.0:
dependencies:
crypto-random-string: 2.0.0
@@ -14762,21 +14351,6 @@ snapshots:
transitivePeerDependencies:
- rollup
unplugin-auto-import@0.18.6(@vueuse/core@12.0.0(typescript@5.7.2))(rollup@4.28.1):
dependencies:
'@antfu/utils': 0.7.10
'@rollup/pluginutils': 5.1.3(rollup@4.28.1)
fast-glob: 3.3.2
local-pkg: 0.5.1
magic-string: 0.30.14
minimatch: 9.0.5
unimport: 3.14.2(rollup@4.28.1)
unplugin: 1.16.0
optionalDependencies:
'@vueuse/core': 12.0.0(typescript@5.7.2)
transitivePeerDependencies:
- rollup
unplugin-combine@1.0.3(esbuild@0.24.0)(rollup@2.79.1)(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.0)(terser@5.17.6)(tsx@4.19.2)(yaml@2.6.1)):
dependencies:
'@antfu/utils': 0.7.10
@@ -14786,15 +14360,6 @@ snapshots:
rollup: 2.79.1
vite: 6.0.3(@types/node@22.10.1)(jiti@2.4.0)(terser@5.17.6)(tsx@4.19.2)(yaml@2.6.1)
unplugin-combine@1.0.3(esbuild@0.24.0)(rollup@4.28.1)(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.0)(terser@5.17.6)(tsx@4.19.2)(yaml@2.6.1)):
dependencies:
'@antfu/utils': 0.7.10
unplugin: 1.16.0
optionalDependencies:
esbuild: 0.24.0
rollup: 4.28.1
vite: 6.0.3(@types/node@22.10.1)(jiti@2.4.0)(terser@5.17.6)(tsx@4.19.2)(yaml@2.6.1)
unplugin-vue-components@0.27.5(@babel/parser@7.26.2)(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2)):
dependencies:
'@antfu/utils': 0.7.10
@@ -14814,25 +14379,6 @@ snapshots:
- rollup
- supports-color
unplugin-vue-components@0.27.5(@babel/parser@7.26.2)(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2)):
dependencies:
'@antfu/utils': 0.7.10
'@rollup/pluginutils': 5.1.3(rollup@4.28.1)
chokidar: 3.6.0
debug: 4.3.7
fast-glob: 3.3.2
local-pkg: 0.5.1
magic-string: 0.30.14
minimatch: 9.0.5
mlly: 1.7.3
unplugin: 1.16.0
vue: 3.5.13(typescript@5.7.2)
optionalDependencies:
'@babel/parser': 7.26.2
transitivePeerDependencies:
- rollup
- supports-color
unplugin-vue-define-options@1.5.2(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2)):
dependencies:
'@vue-macros/common': 1.15.0(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))
@@ -14842,15 +14388,6 @@ snapshots:
- rollup
- vue
unplugin-vue-define-options@1.5.2(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2)):
dependencies:
'@vue-macros/common': 1.15.0(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
ast-walker-scope: 0.6.2
unplugin: 1.16.0
transitivePeerDependencies:
- rollup
- vue
unplugin-vue-macros@2.13.5(@vueuse/core@12.0.0(typescript@5.7.2))(esbuild@0.24.0)(rollup@2.79.1)(typescript@5.7.2)(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.0)(terser@5.17.6)(tsx@4.19.2)(yaml@2.6.1))(vue-tsc@2.1.10(typescript@5.7.2))(vue@3.5.13(typescript@5.7.2)):
dependencies:
'@vue-macros/better-define': 1.11.0(rollup@2.79.1)(vue@3.5.13(typescript@5.7.2))
@@ -14898,53 +14435,6 @@ snapshots:
- vue-tsc
- webpack
unplugin-vue-macros@2.13.5(@vueuse/core@12.0.0(typescript@5.7.2))(esbuild@0.24.0)(rollup@4.28.1)(typescript@5.7.2)(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.0)(terser@5.17.6)(tsx@4.19.2)(yaml@2.6.1))(vue-tsc@2.1.10(typescript@5.7.2))(vue@3.5.13(typescript@5.7.2)):
dependencies:
'@vue-macros/better-define': 1.11.0(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
'@vue-macros/boolean-prop': 0.5.2(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
'@vue-macros/chain-call': 0.4.2(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
'@vue-macros/common': 1.15.0(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
'@vue-macros/config': 0.5.0(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
'@vue-macros/define-emit': 0.5.1(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
'@vue-macros/define-models': 1.3.2(@vueuse/core@12.0.0(typescript@5.7.2))(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
'@vue-macros/define-prop': 0.6.1(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
'@vue-macros/define-props': 4.0.3(@vue-macros/reactivity-transform@1.1.3(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2)))(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
'@vue-macros/define-props-refs': 1.3.2(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
'@vue-macros/define-render': 1.6.2(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
'@vue-macros/define-slots': 1.2.2(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
'@vue-macros/define-stylex': 0.2.0(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
'@vue-macros/devtools': 0.4.0(typescript@5.7.2)(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.0)(terser@5.17.6)(tsx@4.19.2)(yaml@2.6.1))
'@vue-macros/export-expose': 0.3.2(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
'@vue-macros/export-props': 0.6.2(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
'@vue-macros/export-render': 0.3.2(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
'@vue-macros/hoist-static': 1.6.2(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
'@vue-macros/jsx-directive': 0.9.3(rollup@4.28.1)(typescript@5.7.2)
'@vue-macros/named-template': 0.5.2(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
'@vue-macros/reactivity-transform': 1.1.3(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
'@vue-macros/script-lang': 0.2.2(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
'@vue-macros/setup-block': 0.4.2(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
'@vue-macros/setup-component': 0.18.2(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
'@vue-macros/setup-sfc': 0.18.2(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
'@vue-macros/short-bind': 1.1.2(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
'@vue-macros/short-emits': 1.6.2(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
'@vue-macros/short-vmodel': 1.5.2(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
'@vue-macros/volar': 0.30.7(rollup@4.28.1)(typescript@5.7.2)(vue-tsc@2.1.10(typescript@5.7.2))(vue@3.5.13(typescript@5.7.2))
unplugin: 2.0.0
unplugin-combine: 1.0.3(esbuild@0.24.0)(rollup@4.28.1)(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.0)(terser@5.17.6)(tsx@4.19.2)(yaml@2.6.1))
unplugin-vue-define-options: 1.5.2(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
vue: 3.5.13(typescript@5.7.2)
transitivePeerDependencies:
- '@rspack/core'
- '@vueuse/core'
- esbuild
- rolldown
- rollup
- supports-color
- typescript
- vite
- vue-tsc
- webpack
unplugin-vue-markdown@0.27.1(rollup@2.79.1)(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.0)(terser@5.17.6)(tsx@4.19.2)(yaml@2.6.1)):
dependencies:
'@mdit-vue/plugin-component': 2.1.3
@@ -14959,20 +14449,6 @@ snapshots:
transitivePeerDependencies:
- rollup
unplugin-vue-markdown@0.27.1(rollup@4.28.1)(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.0)(terser@5.17.6)(tsx@4.19.2)(yaml@2.6.1)):
dependencies:
'@mdit-vue/plugin-component': 2.1.3
'@mdit-vue/plugin-frontmatter': 2.1.3
'@mdit-vue/types': 2.1.0
'@rollup/pluginutils': 5.1.3(rollup@4.28.1)
'@types/markdown-it': 14.1.2
markdown-it: 14.1.0
markdown-it-async: 0.1.3
unplugin: 1.16.0
vite: 6.0.3(@types/node@22.10.1)(jiti@2.4.0)(terser@5.17.6)(tsx@4.19.2)(yaml@2.6.1)
transitivePeerDependencies:
- rollup
unplugin-vue-router@0.10.9(rollup@2.79.1)(vue-router@4.5.0(vue@3.5.13(typescript@5.7.2)))(vue@3.5.13(typescript@5.7.2)):
dependencies:
'@babel/types': 7.26.0
@@ -14995,28 +14471,6 @@ snapshots:
- rollup
- vue
unplugin-vue-router@0.10.9(rollup@4.28.1)(vue-router@4.5.0(vue@3.5.13(typescript@5.7.2)))(vue@3.5.13(typescript@5.7.2)):
dependencies:
'@babel/types': 7.26.0
'@rollup/pluginutils': 5.1.3(rollup@4.28.1)
'@vue-macros/common': 1.15.0(rollup@4.28.1)(vue@3.5.13(typescript@5.7.2))
ast-walker-scope: 0.6.2
chokidar: 3.6.0
fast-glob: 3.3.2
json5: 2.2.3
local-pkg: 0.5.1
magic-string: 0.30.14
mlly: 1.7.3
pathe: 1.1.2
scule: 1.3.0
unplugin: 2.0.0-beta.1
yaml: 2.6.1
optionalDependencies:
vue-router: 4.5.0(vue@3.5.13(typescript@5.7.2))
transitivePeerDependencies:
- rollup
- vue
unplugin@1.16.0:
dependencies:
acorn: 8.14.0
@@ -15094,16 +14548,6 @@ snapshots:
- rollup
- supports-color
vite-bundle-visualizer@1.2.1(rollup@4.28.1):
dependencies:
cac: 6.7.14
import-from-esm: 1.3.3
rollup-plugin-visualizer: 5.11.0(rollup@4.28.1)
tmp: 0.2.3
transitivePeerDependencies:
- rollup
- supports-color
vite-hot-client@0.2.4(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.0)(terser@5.17.6)(tsx@4.19.2)(yaml@2.6.1)):
dependencies:
vite: 6.0.3(@types/node@22.10.1)(jiti@2.4.0)(terser@5.17.6)(tsx@4.19.2)(yaml@2.6.1)
@@ -15158,22 +14602,6 @@ snapshots:
- rollup
- supports-color
vite-plugin-inspect@0.8.8(rollup@4.28.1)(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.0)(terser@5.17.6)(tsx@4.19.2)(yaml@2.6.1)):
dependencies:
'@antfu/utils': 0.7.10
'@rollup/pluginutils': 5.1.3(rollup@4.28.1)
debug: 4.3.7
error-stack-parser-es: 0.1.5
fs-extra: 11.2.0
open: 10.1.0
perfect-debounce: 1.0.0
picocolors: 1.1.1
sirv: 3.0.0
vite: 6.0.3(@types/node@22.10.1)(jiti@2.4.0)(terser@5.17.6)(tsx@4.19.2)(yaml@2.6.1)
transitivePeerDependencies:
- rollup
- supports-color
vite-plugin-pwa@0.21.1(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.0)(terser@5.17.6)(tsx@4.19.2)(yaml@2.6.1))(workbox-build@7.3.0)(workbox-window@7.3.0):
dependencies:
debug: 4.3.7
@@ -15201,22 +14629,6 @@ snapshots:
- supports-color
- vue
vite-plugin-vue-devtools@7.6.7(rollup@4.28.1)(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.0)(terser@5.17.6)(tsx@4.19.2)(yaml@2.6.1))(vue@3.5.13(typescript@5.7.2)):
dependencies:
'@vue/devtools-core': 7.6.7(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.0)(terser@5.17.6)(tsx@4.19.2)(yaml@2.6.1))(vue@3.5.13(typescript@5.7.2))
'@vue/devtools-kit': 7.6.7
'@vue/devtools-shared': 7.6.7
execa: 9.5.1
sirv: 3.0.0
vite: 6.0.3(@types/node@22.10.1)(jiti@2.4.0)(terser@5.17.6)(tsx@4.19.2)(yaml@2.6.1)
vite-plugin-inspect: 0.8.8(rollup@4.28.1)(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.0)(terser@5.17.6)(tsx@4.19.2)(yaml@2.6.1))
vite-plugin-vue-inspector: 5.3.1(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.0)(terser@5.17.6)(tsx@4.19.2)(yaml@2.6.1))
transitivePeerDependencies:
- '@nuxt/kit'
- rollup
- supports-color
- vue
vite-plugin-vue-inspector@5.3.1(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.0)(terser@5.17.6)(tsx@4.19.2)(yaml@2.6.1)):
dependencies:
'@babel/core': 7.25.2