feat(provider-transformers): multi-pages

Signed-off-by: Neko Ayaka <neko@ayaka.moe>
This commit is contained in:
Neko Ayaka
2025-03-02 01:17:20 +08:00
parent b9f59cce49
commit 2ab0a7248b
12 changed files with 245 additions and 202 deletions
@@ -17,7 +17,7 @@
</head>
<body class="font-sans">
<div id="app"></div>
<script type="module" src="/src/main.ts"></script>
<script type="module" src="/playground/src/main.ts"></script>
<noscript> This website requires JavaScript to function properly. Please enable JavaScript to continue. </noscript>
</body>
</html>
+3 -1
View File
@@ -56,7 +56,9 @@
"@xsai/embed": "catalog:",
"@xsai/shared": "catalog:",
"defu": "^6.1.4",
"es-toolkit": "^1.32.0"
"es-toolkit": "^1.32.0",
"unplugin-vue-router": "^0.11.2",
"vue-router": "^4.5.0"
},
"devDependencies": {
"@iconify-json/solar": "^1.2.2",
@@ -1,76 +1,8 @@
<script setup lang="ts">
import type { InitiateProgressInfo, ProgressStatusInfo } from '@proj-airi/utils-transformers/types'
import { useDark, useToggle } from '@vueuse/core'
import { embed } from '@xsai/embed'
import { serialize } from 'superjson'
import { onMounted, ref } from 'vue'
import { createTransformers } from '../../src'
import embedWorkerURL from '../../src/worker?worker&url'
import Progress from './components/Progress.vue'
const isDark = useDark()
const toggleDark = useToggle(isDark)
const modelId = ref('Xenova/all-MiniLM-L6-v2')
const input = ref('Hello, world!')
const results = ref<any>()
const loadingItems = ref<(InitiateProgressInfo | ProgressStatusInfo)[]>([])
const loadingItemsSet = new Set<string>()
const transformersProvider = createTransformers({ embedWorkerURL })
onMounted(async () => {
await load()
})
async function load() {
await transformersProvider.loadEmbed(modelId.value, {
onProgress: (progress) => {
switch (progress.status) {
case 'initiate':
if (loadingItemsSet.has(progress.file)) {
return
}
loadingItemsSet.add(progress.file)
loadingItems.value.push(progress)
break
case 'progress':
loadingItems.value = loadingItems.value.map((item) => {
if (item.file === progress.file) {
return { ...item, ...progress }
}
return item
})
break
case 'done':
// loadingItems.value = loadingItems.value.filter(item => item.file !== progress.file)
break
}
},
})
}
async function execute() {
const result = await embed({
...transformersProvider.embed(modelId.value),
input: input.value,
})
results.value = result
}
async function handleLoad() {
await transformersProvider.terminateEmbed()
await load()
}
</script>
<template>
@@ -91,51 +23,29 @@ async function handleLoad() {
</a>
</div>
</header>
<div flex flex-col gap-2>
<h2 text-xl>
Options
</h2>
<div w-full flex flex-row gap-2>
<div w-full flex flex-row gap-2>
<label flex flex-1 flex-row items-center gap-2>
<div text-nowrap><span>Model ID</span></div>
<input v-model="modelId" bg="neutral-100 dark:neutral-800" block w-full rounded-lg p-2>
</label>
<button rounded-lg bg="blue-100 dark:blue-900" px-4 py-2 @click="() => handleLoad()">
Load
</button>
</div>
</div>
<div v-if="loadingItems.length > 0" class="w-full flex flex-col gap-2">
<Progress
v-for="(item, index) of loadingItems" :key="index" :text="item.file"
:percentage="'progress' in item ? item.progress || 0 : 0" :total="'total' in item ? item.total || 0 : 0"
/>
</div>
</div>
<div flex flex-col gap-2>
<div flex flex-col gap-2>
<h2 text-xl>
Inference
</h2>
<div>
<textarea v-model="input" h-full w-full rounded-lg bg="neutral-100 dark:neutral-800" p-4 font-mono />
</div>
<div flex flex-row gap-2>
<button rounded-lg bg="blue-100 dark:blue-900" px-4 py-2 @click="execute">
Extract
</button>
</div>
<div flex flex-col gap-2>
<h2 text-xl>
Results
</h2>
<div max-h-100 of-y-scroll whitespace-pre-wrap p-4 font-mono>
{{ JSON.stringify(serialize(results).json, null, 2) }}
</div>
</div>
</div>
</div>
<nav bg="neutral-100 dark:neutral-800" w-fit flex items-center of-hidden rounded-lg>
<RouterLink
to="/" px-3 py-2 bg="hover:neutral-200 dark:hover:neutral-700"
transition="all duration-250 ease-in-out"
>
<h1>Embedding</h1>
</RouterLink>
<div bg="neutral-200 dark:neutral-600" h="1lh" w="0.5" />
<RouterLink
to="/transcribe" px-3 py-2 bg="hover:neutral-200 dark:hover:neutral-700"
transition="all duration-250 ease-in-out"
>
<h1>Transcribe</h1>
</RouterLink>
<div bg="neutral-200 dark:neutral-600" h="1lh" w="0.5" />
<RouterLink
to="/speech" px-3 py-2 bg="hover:neutral-200 dark:hover:neutral-700"
transition="all duration-250 ease-in-out"
>
<h1>Speech</h1>
</RouterLink>
</nav>
<RouterView />
</div>
</template>
@@ -1,8 +1,13 @@
import { createApp } from 'vue'
import { createRouter, createWebHashHistory } from 'vue-router'
import { routes } from 'vue-router/auto-routes'
import App from './App.vue'
import '@unocss/reset/tailwind.css'
import 'uno.css'
const router = createRouter({ routes, history: createWebHashHistory() })
createApp(App)
.use(router)
.mount('#app')
@@ -0,0 +1,118 @@
<script setup lang="ts">
import type { InitiateProgressInfo, ProgressStatusInfo } from '@proj-airi/utils-transformers/types'
import { embed } from '@xsai/embed'
import { serialize } from 'superjson'
import { onMounted, ref } from 'vue'
import { createTransformers } from '../../../src'
import embedWorkerURL from '../../../src/worker?worker&url'
import Progress from '../components/Progress.vue'
const modelId = ref('Xenova/all-MiniLM-L6-v2')
const input = ref('Hello, world!')
const results = ref<any>()
const loadingItems = ref<(InitiateProgressInfo | ProgressStatusInfo)[]>([])
const loadingItemsSet = new Set<string>()
const transformersProvider = createTransformers({ embedWorkerURL })
onMounted(async () => {
await load()
})
async function load() {
await transformersProvider.loadEmbed(modelId.value, {
onProgress: (progress) => {
switch (progress.status) {
case 'initiate':
if (loadingItemsSet.has(progress.file)) {
return
}
loadingItemsSet.add(progress.file)
loadingItems.value.push(progress)
break
case 'progress':
loadingItems.value = loadingItems.value.map((item) => {
if (item.file === progress.file) {
return { ...item, ...progress }
}
return item
})
break
case 'done':
// loadingItems.value = loadingItems.value.filter(item => item.file !== progress.file)
break
}
},
})
}
async function execute() {
const result = await embed({
...transformersProvider.embed(modelId.value),
input: input.value,
})
results.value = result
}
async function handleLoad() {
await transformersProvider.terminateEmbed()
await load()
}
</script>
<template>
<div flex flex-col gap-2>
<h2 text-xl>
Options
</h2>
<div w-full flex flex-row gap-2>
<div w-full flex flex-row gap-2>
<label flex flex-1 flex-row items-center gap-2>
<div text-nowrap><span>Model ID</span></div>
<input v-model="modelId" bg="neutral-100 dark:neutral-800" block w-full rounded-lg p-2>
</label>
<button rounded-lg bg="blue-100 dark:blue-900" px-4 py-2 @click="() => handleLoad()">
Load
</button>
</div>
</div>
<div v-if="loadingItems.length > 0" class="w-full flex flex-col gap-2">
<Progress
v-for="(item, index) of loadingItems" :key="index" :text="item.file"
:percentage="'progress' in item ? item.progress || 0 : 0" :total="'total' in item ? item.total || 0 : 0"
/>
</div>
</div>
<div flex flex-col gap-2>
<div flex flex-col gap-2>
<h2 text-xl>
Inference
</h2>
<div>
<textarea v-model="input" h-full w-full rounded-lg bg="neutral-100 dark:neutral-800" p-4 font-mono />
</div>
<div flex flex-row gap-2>
<button rounded-lg bg="blue-100 dark:blue-900" px-4 py-2 @click="execute">
Extract
</button>
</div>
<div flex flex-col gap-2>
<h2 text-xl>
Results
</h2>
<div max-h-100 of-y-scroll whitespace-pre-wrap p-4 font-mono>
{{ JSON.stringify(serialize(results).json, null, 2) }}
</div>
</div>
</div>
</div>
</template>
@@ -0,0 +1,5 @@
<template>
<div>
<h1>Speech</h1>
</div>
</template>
@@ -0,0 +1,5 @@
<template>
<div>
<h1>Transcribe</h1>
</div>
</template>
+9 -2
View File
@@ -13,7 +13,8 @@
"vite/client",
// @webgpu/types
// https://www.npmjs.com/package/@webgpu/types
"@webgpu/types"
"@webgpu/types",
"unplugin-vue-router/client"
],
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
@@ -22,6 +23,12 @@
"skipLibCheck": true
},
"include": [
"src/**/*.ts"
"src/**/*.ts",
"src/**/*.d.ts",
"src/**/*.mts",
"playground/**/*.ts",
"playground/**/*.d.ts",
"playground/**/*.mts",
"playground/**/*.vue"
]
}
+11 -1
View File
@@ -1,10 +1,20 @@
import { resolve } from 'node:path'
import Vue from '@vitejs/plugin-vue'
import Unocss from 'unocss/vite'
import VueRouter from 'unplugin-vue-router/vite'
import { defineConfig } from 'vite'
export default defineConfig({
root: 'playground',
build: {
outDir: resolve(import.meta.dirname, 'playground', 'dist'),
},
plugins: [
// https://github.com/posva/unplugin-vue-router
VueRouter({
root: 'playground',
extensions: ['.vue', '.md'],
dts: resolve(import.meta.dirname, 'playground', 'src', 'typed-router.d.ts'),
}),
Vue(),
// https://github.com/antfu/unocss
// see uno.config.ts for config
@@ -23,6 +23,7 @@ const props = withDefaults(defineProps<{
paused: boolean
}>(), {
mouthOpenSize: 0,
motion: '',
})
const pixiApp = toRef(() => props.app)
@@ -34,7 +34,7 @@ const db = ref<DuckDBWasmDrizzleDatabase>()
// const transformersProvider = createTransformers({ embedWorkerURL })
const vrmViewerRef = ref<{ setExpression: (expression: string) => void }>()
const motion = ref('')
const motion = ref<string>('')
const { stageView, elevenLabsApiKey, elevenlabsVoiceEnglish, elevenlabsVoiceJapanese } = storeToRefs(useSettings())
const { mouthOpenSize } = storeToRefs(useSpeakingStore())
+63 -83
View File
@@ -465,7 +465,7 @@ importers:
version: 0.8.2
'@gcornut/valibot-json-schema':
specifier: ^0.42.0
version: 0.42.0(esbuild@0.19.12)(typescript@5.8.2)
version: 0.42.0(esbuild@0.25.0)(typescript@5.8.2)
'@huggingface/transformers':
specifier: ^3.3.3
version: 3.3.3
@@ -537,7 +537,7 @@ importers:
version: 2.10.3
'@typeschema/valibot':
specifier: ^0.14.0
version: 0.14.0(@gcornut/valibot-json-schema@0.42.0(esbuild@0.19.12)(typescript@5.8.2))(@types/json-schema@7.0.15)(valibot@1.0.0-beta.9(typescript@5.8.2))
version: 0.14.0(@gcornut/valibot-json-schema@0.42.0(esbuild@0.25.0)(typescript@5.8.2))(@types/json-schema@7.0.15)(valibot@1.0.0-beta.9(typescript@5.8.2))
'@unhead/vue':
specifier: ^2.0.0-beta.2
version: 2.0.0-beta.2(vue@3.5.13(typescript@5.8.2))
@@ -736,7 +736,7 @@ importers:
version: 28.4.1(@babel/parser@7.26.7)(@nuxt/kit@3.14.1592(magicast@0.3.5)(rollup@4.34.9))(vue@3.5.13(typescript@5.8.2))
unplugin-vue-macros:
specifier: ^2.14.5
version: 2.14.5(@vueuse/core@12.7.0(typescript@5.8.2))(esbuild@0.19.12)(rollup@4.34.9)(typescript@5.8.2)(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.1)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0))(vue-tsc@2.2.6(typescript@5.8.2))(vue@3.5.13(typescript@5.8.2))
version: 2.14.5(@vueuse/core@12.7.0(typescript@5.8.2))(esbuild@0.25.0)(rollup@4.34.9)(typescript@5.8.2)(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.1)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0))(vue-tsc@2.2.6(typescript@5.8.2))(vue@3.5.13(typescript@5.8.2))
unplugin-vue-markdown:
specifier: ^28.3.1
version: 28.3.1(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.1)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0))
@@ -974,6 +974,12 @@ importers:
es-toolkit:
specifier: ^1.32.0
version: 1.32.0
unplugin-vue-router:
specifier: ^0.11.2
version: 0.11.2(rollup@4.34.9)(vue-router@4.5.0(vue@3.5.13(typescript@5.8.2)))(vue@3.5.13(typescript@5.8.2))
vue-router:
specifier: ^4.5.0
version: 4.5.0(vue@3.5.13(typescript@5.8.2))
web-worker:
specifier: ^1.5.0
version: 1.5.0
@@ -13283,16 +13289,6 @@ snapshots:
'@formkit/auto-animate@0.8.2': {}
'@gcornut/valibot-json-schema@0.42.0(esbuild@0.19.12)(typescript@5.8.2)':
dependencies:
valibot: 0.42.1(typescript@5.8.2)
optionalDependencies:
'@types/json-schema': 7.0.15
esbuild-runner: 2.2.2(esbuild@0.19.12)
transitivePeerDependencies:
- esbuild
- typescript
'@gcornut/valibot-json-schema@0.42.0(esbuild@0.25.0)(typescript@5.8.2)':
dependencies:
valibot: 0.42.1(typescript@5.8.2)
@@ -14996,20 +14992,11 @@ snapshots:
dependencies:
'@typeschema/core': 0.14.0(@types/json-schema@7.0.15)
optionalDependencies:
'@typeschema/valibot': 0.14.0(@gcornut/valibot-json-schema@0.42.0(esbuild@0.19.12)(typescript@5.8.2))(@types/json-schema@7.0.15)(valibot@1.0.0-beta.9(typescript@5.8.2))
'@typeschema/valibot': 0.14.0(@gcornut/valibot-json-schema@0.42.0(esbuild@0.25.0)(typescript@5.8.2))(@types/json-schema@7.0.15)(valibot@1.0.0-beta.9(typescript@5.8.2))
'@typeschema/zod': 0.14.0(@types/json-schema@7.0.15)(zod-to-json-schema@3.24.3(zod@3.24.2))(zod@3.24.2)
transitivePeerDependencies:
- '@types/json-schema'
'@typeschema/valibot@0.14.0(@gcornut/valibot-json-schema@0.42.0(esbuild@0.19.12)(typescript@5.8.2))(@types/json-schema@7.0.15)(valibot@1.0.0-beta.9(typescript@5.8.2))':
dependencies:
'@typeschema/core': 0.14.0(@types/json-schema@7.0.15)
optionalDependencies:
'@gcornut/valibot-json-schema': 0.42.0(esbuild@0.19.12)(typescript@5.8.2)
valibot: 1.0.0-beta.9(typescript@5.8.2)
transitivePeerDependencies:
- '@types/json-schema'
'@typeschema/valibot@0.14.0(@gcornut/valibot-json-schema@0.42.0(esbuild@0.25.0)(typescript@5.8.2))(@types/json-schema@7.0.15)(valibot@1.0.0-beta.9(typescript@5.8.2))':
dependencies:
'@typeschema/core': 0.14.0(@types/json-schema@7.0.15)
@@ -17797,13 +17784,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
esbuild-runner@2.2.2(esbuild@0.19.12):
dependencies:
esbuild: 0.19.12
source-map-support: 0.5.21
tslib: 2.4.0
optional: true
esbuild-runner@2.2.2(esbuild@0.25.0):
dependencies:
esbuild: 0.25.0
@@ -23379,13 +23359,6 @@ snapshots:
'@nuxt/kit': 3.14.1592(magicast@0.3.5)(rollup@4.34.9)
'@vueuse/core': 12.7.0(typescript@5.8.2)
unplugin-combine@1.2.0(esbuild@0.19.12)(rollup@4.34.9)(unplugin@1.16.1)(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.1)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0)):
optionalDependencies:
esbuild: 0.19.12
rollup: 4.34.9
unplugin: 1.16.1
vite: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.1)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0)
unplugin-combine@1.2.0(esbuild@0.25.0)(rollup@2.79.1)(unplugin@1.16.1)(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.1)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0)):
optionalDependencies:
esbuild: 0.25.0
@@ -23393,6 +23366,13 @@ snapshots:
unplugin: 1.16.1
vite: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.1)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0)
unplugin-combine@1.2.0(esbuild@0.25.0)(rollup@4.34.9)(unplugin@1.16.1)(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.1)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0)):
optionalDependencies:
esbuild: 0.25.0
rollup: 4.34.9
unplugin: 1.16.1
vite: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.1)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0)
unplugin-utils@0.2.4:
dependencies:
pathe: 2.0.3
@@ -23440,52 +23420,6 @@ snapshots:
transitivePeerDependencies:
- vue
unplugin-vue-macros@2.14.5(@vueuse/core@12.7.0(typescript@5.8.2))(esbuild@0.19.12)(rollup@4.34.9)(typescript@5.8.2)(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.1)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0))(vue-tsc@2.2.6(typescript@5.8.2))(vue@3.5.13(typescript@5.8.2)):
dependencies:
'@vue-macros/better-define': 1.11.4(vue@3.5.13(typescript@5.8.2))
'@vue-macros/boolean-prop': 0.5.5(vue@3.5.13(typescript@5.8.2))
'@vue-macros/chain-call': 0.4.5(vue@3.5.13(typescript@5.8.2))
'@vue-macros/common': 1.16.1(vue@3.5.13(typescript@5.8.2))
'@vue-macros/config': 0.6.1(vue@3.5.13(typescript@5.8.2))
'@vue-macros/define-emit': 0.5.4(vue@3.5.13(typescript@5.8.2))
'@vue-macros/define-models': 1.3.5(@vueuse/core@12.7.0(typescript@5.8.2))(vue@3.5.13(typescript@5.8.2))
'@vue-macros/define-prop': 0.6.5(vue@3.5.13(typescript@5.8.2))
'@vue-macros/define-props': 4.0.6(@vue-macros/reactivity-transform@1.1.6(vue@3.5.13(typescript@5.8.2)))(vue@3.5.13(typescript@5.8.2))
'@vue-macros/define-props-refs': 1.3.5(vue@3.5.13(typescript@5.8.2))
'@vue-macros/define-render': 1.6.6(vue@3.5.13(typescript@5.8.2))
'@vue-macros/define-slots': 1.2.6(vue@3.5.13(typescript@5.8.2))
'@vue-macros/define-stylex': 0.2.3(vue@3.5.13(typescript@5.8.2))
'@vue-macros/devtools': 0.4.1(typescript@5.8.2)(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.1)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0))
'@vue-macros/export-expose': 0.3.5(vue@3.5.13(typescript@5.8.2))
'@vue-macros/export-props': 0.6.5(vue@3.5.13(typescript@5.8.2))
'@vue-macros/export-render': 0.3.5(vue@3.5.13(typescript@5.8.2))
'@vue-macros/hoist-static': 1.7.0(vue@3.5.13(typescript@5.8.2))
'@vue-macros/jsx-directive': 0.10.6(typescript@5.8.2)
'@vue-macros/named-template': 0.5.5(vue@3.5.13(typescript@5.8.2))
'@vue-macros/reactivity-transform': 1.1.6(vue@3.5.13(typescript@5.8.2))
'@vue-macros/script-lang': 0.2.5(vue@3.5.13(typescript@5.8.2))
'@vue-macros/setup-block': 0.4.5(vue@3.5.13(typescript@5.8.2))
'@vue-macros/setup-component': 0.18.5(vue@3.5.13(typescript@5.8.2))
'@vue-macros/setup-sfc': 0.18.5(vue@3.5.13(typescript@5.8.2))
'@vue-macros/short-bind': 1.1.5(vue@3.5.13(typescript@5.8.2))
'@vue-macros/short-emits': 1.6.5(vue@3.5.13(typescript@5.8.2))
'@vue-macros/short-vmodel': 1.5.5(vue@3.5.13(typescript@5.8.2))
'@vue-macros/volar': 0.30.15(rollup@4.34.9)(typescript@5.8.2)(vue-tsc@2.2.6(typescript@5.8.2))(vue@3.5.13(typescript@5.8.2))
unplugin: 1.16.1
unplugin-combine: 1.2.0(esbuild@0.19.12)(rollup@4.34.9)(unplugin@1.16.1)(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.1)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0))
unplugin-vue-define-options: 1.5.5(vue@3.5.13(typescript@5.8.2))
vue: 3.5.13(typescript@5.8.2)
transitivePeerDependencies:
- '@rspack/core'
- '@vueuse/core'
- esbuild
- rolldown
- rollup
- typescript
- vite
- vue-tsc
- webpack
unplugin-vue-macros@2.14.5(@vueuse/core@12.7.0(typescript@5.8.2))(esbuild@0.25.0)(rollup@2.79.1)(typescript@5.8.2)(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.1)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0))(vue-tsc@2.2.6(typescript@5.8.2))(vue@3.5.13(typescript@5.8.2)):
dependencies:
'@vue-macros/better-define': 1.11.4(vue@3.5.13(typescript@5.8.2))
@@ -23532,6 +23466,52 @@ snapshots:
- vue-tsc
- webpack
unplugin-vue-macros@2.14.5(@vueuse/core@12.7.0(typescript@5.8.2))(esbuild@0.25.0)(rollup@4.34.9)(typescript@5.8.2)(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.1)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0))(vue-tsc@2.2.6(typescript@5.8.2))(vue@3.5.13(typescript@5.8.2)):
dependencies:
'@vue-macros/better-define': 1.11.4(vue@3.5.13(typescript@5.8.2))
'@vue-macros/boolean-prop': 0.5.5(vue@3.5.13(typescript@5.8.2))
'@vue-macros/chain-call': 0.4.5(vue@3.5.13(typescript@5.8.2))
'@vue-macros/common': 1.16.1(vue@3.5.13(typescript@5.8.2))
'@vue-macros/config': 0.6.1(vue@3.5.13(typescript@5.8.2))
'@vue-macros/define-emit': 0.5.4(vue@3.5.13(typescript@5.8.2))
'@vue-macros/define-models': 1.3.5(@vueuse/core@12.7.0(typescript@5.8.2))(vue@3.5.13(typescript@5.8.2))
'@vue-macros/define-prop': 0.6.5(vue@3.5.13(typescript@5.8.2))
'@vue-macros/define-props': 4.0.6(@vue-macros/reactivity-transform@1.1.6(vue@3.5.13(typescript@5.8.2)))(vue@3.5.13(typescript@5.8.2))
'@vue-macros/define-props-refs': 1.3.5(vue@3.5.13(typescript@5.8.2))
'@vue-macros/define-render': 1.6.6(vue@3.5.13(typescript@5.8.2))
'@vue-macros/define-slots': 1.2.6(vue@3.5.13(typescript@5.8.2))
'@vue-macros/define-stylex': 0.2.3(vue@3.5.13(typescript@5.8.2))
'@vue-macros/devtools': 0.4.1(typescript@5.8.2)(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.1)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0))
'@vue-macros/export-expose': 0.3.5(vue@3.5.13(typescript@5.8.2))
'@vue-macros/export-props': 0.6.5(vue@3.5.13(typescript@5.8.2))
'@vue-macros/export-render': 0.3.5(vue@3.5.13(typescript@5.8.2))
'@vue-macros/hoist-static': 1.7.0(vue@3.5.13(typescript@5.8.2))
'@vue-macros/jsx-directive': 0.10.6(typescript@5.8.2)
'@vue-macros/named-template': 0.5.5(vue@3.5.13(typescript@5.8.2))
'@vue-macros/reactivity-transform': 1.1.6(vue@3.5.13(typescript@5.8.2))
'@vue-macros/script-lang': 0.2.5(vue@3.5.13(typescript@5.8.2))
'@vue-macros/setup-block': 0.4.5(vue@3.5.13(typescript@5.8.2))
'@vue-macros/setup-component': 0.18.5(vue@3.5.13(typescript@5.8.2))
'@vue-macros/setup-sfc': 0.18.5(vue@3.5.13(typescript@5.8.2))
'@vue-macros/short-bind': 1.1.5(vue@3.5.13(typescript@5.8.2))
'@vue-macros/short-emits': 1.6.5(vue@3.5.13(typescript@5.8.2))
'@vue-macros/short-vmodel': 1.5.5(vue@3.5.13(typescript@5.8.2))
'@vue-macros/volar': 0.30.15(rollup@4.34.9)(typescript@5.8.2)(vue-tsc@2.2.6(typescript@5.8.2))(vue@3.5.13(typescript@5.8.2))
unplugin: 1.16.1
unplugin-combine: 1.2.0(esbuild@0.25.0)(rollup@4.34.9)(unplugin@1.16.1)(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.1)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0))
unplugin-vue-define-options: 1.5.5(vue@3.5.13(typescript@5.8.2))
vue: 3.5.13(typescript@5.8.2)
transitivePeerDependencies:
- '@rspack/core'
- '@vueuse/core'
- esbuild
- rolldown
- rollup
- typescript
- vite
- vue-tsc
- webpack
unplugin-vue-markdown@28.3.1(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.1)(terser@5.17.6)(tsx@4.19.3)(yaml@2.7.0)):
dependencies:
'@mdit-vue/plugin-component': 2.1.3