From c4b53010d901aa938200083d7ae8f1d1f7d11348 Mon Sep 17 00:00:00 2001 From: Neko Ayaka Date: Mon, 1 Sep 2025 17:54:18 +0800 Subject: [PATCH] refactor(stage-*): audio hearing module --- .../composables/tauri-window-persistence.ts | 0 .../src/pages/settings/modules/hearing.vue | 58 +- .../src/tauri/vad/process.worklet.ts | 2 +- apps/stage-web/package.json | 1 + .../src/pages/settings/modules/hearing.vue | 52 +- .../src/workers/vad/process.worklet.ts | 2 +- apps/stage-web/src/workers/vad/vad.ts | 22 +- cspell.config.yaml | 3 + .../Providers/TranscriptionPlayground.vue | 167 ++---- .../src/composables/audio/audio-recorder.ts | 113 +--- packages/stage-ui/src/libs/audio/vad.ts | 14 +- pnpm-lock.yaml | 547 ++---------------- 12 files changed, 192 insertions(+), 789 deletions(-) create mode 100644 apps/stage-tamagotchi/src/composables/tauri-window-persistence.ts diff --git a/apps/stage-tamagotchi/src/composables/tauri-window-persistence.ts b/apps/stage-tamagotchi/src/composables/tauri-window-persistence.ts new file mode 100644 index 000000000..e69de29bb diff --git a/apps/stage-tamagotchi/src/pages/settings/modules/hearing.vue b/apps/stage-tamagotchi/src/pages/settings/modules/hearing.vue index 9d8cc72e6..1577d352f 100644 --- a/apps/stage-tamagotchi/src/pages/settings/modules/hearing.vue +++ b/apps/stage-tamagotchi/src/pages/settings/modules/hearing.vue @@ -2,10 +2,11 @@ import type { TranscriptionProvider } from '@xsai-ext/shared-providers' import { Alert, Button, ErrorContainer, LevelMeter, RadioCardManySelect, RadioCardSimple, TestDummyMarker, ThresholdMeter, TimeSeriesChart } from '@proj-airi/stage-ui/components' -import { useAudioAnalyzer, useAudioDevice, useAudioRecorder } from '@proj-airi/stage-ui/composables' +import { useAudioAnalyzer, useAudioRecorder } from '@proj-airi/stage-ui/composables' import { useAudioContext } from '@proj-airi/stage-ui/stores/audio' import { useHearingStore } from '@proj-airi/stage-ui/stores/modules/hearing' import { useProvidersStore } from '@proj-airi/stage-ui/stores/providers' +import { useSettingsAudioDevice } from '@proj-airi/stage-ui/stores/settings' import { FieldCheckbox, FieldRange, FieldSelect } from '@proj-airi/ui' import { storeToRefs } from 'pinia' import { computed, onMounted, onUnmounted, ref, watch } from 'vue' @@ -31,7 +32,8 @@ const { const providersStore = useProvidersStore() const { configuredTranscriptionProvidersMetadata } = storeToRefs(providersStore) -const { audioInputs, selectedAudioInput, stream, stopStream, startStream } = useAudioDevice() +const { stopStream, startStream } = useSettingsAudioDevice() +const { audioInputs, selectedAudioInput, stream } = storeToRefs(useSettingsAudioDevice()) const { startRecord, stopRecord, onStopRecord } = useAudioRecorder(stream) const { startAnalyzer, stopAnalyzer, onAnalyzerUpdate, volumeLevel } = useAudioAnalyzer() const { audioContext } = storeToRefs(useAudioContext()) @@ -144,6 +146,32 @@ async function loadVADModel() { } } +onStopRecord(async (recording) => { + if (!recording) + return + + try { + if (recording && recording.size > 0) { + audios.value.push(recording) + + const provider = await providersStore.getProviderInstance>(activeTranscriptionProvider.value) + if (!provider) { + throw new Error('Failed to initialize speech provider') + } + + // Get model from configuration or use default + const model = activeTranscriptionModel.value + const res = await hearingStore.transcription(provider, model, new File([recording], 'recording.wav')) + + transcriptions.value.push(res.text) + } + } + catch (err) { + error.value = err instanceof Error ? err.message : String(err) + console.error('Error generating transcription:', error.value) + } +}) + // Audio monitoring async function setupAudioMonitoring() { try { @@ -161,32 +189,6 @@ async function setupAudioMonitoring() { return } - onStopRecord(async (recording) => { - if (!recording) - return - - try { - if (recording && recording.size > 0) { - audios.value.push(recording) - - const provider = await providersStore.getProviderInstance>(activeTranscriptionProvider.value) - if (!provider) { - throw new Error('Failed to initialize speech provider') - } - - // Get model from configuration or use default - const model = activeTranscriptionModel.value - const res = await hearingStore.transcription(provider, model, new File([recording], 'recording.wav')) - - transcriptions.value.push(res.text) - } - } - catch (err) { - error.value = err instanceof Error ? err.message : String(err) - console.error('Error generating transcription:', error.value) - } - }) - const source = audioContext.value.createMediaStreamSource(stream.value) const analyzer = startAnalyzer(audioContext.value) diff --git a/apps/stage-tamagotchi/src/tauri/vad/process.worklet.ts b/apps/stage-tamagotchi/src/tauri/vad/process.worklet.ts index 899d933fe..684543d0c 100644 --- a/apps/stage-tamagotchi/src/tauri/vad/process.worklet.ts +++ b/apps/stage-tamagotchi/src/tauri/vad/process.worklet.ts @@ -50,4 +50,4 @@ class VADProcessor extends AudioWorkletProcessor { } } -registerProcessor('vad-processor', VADProcessor) +registerProcessor('vad-audio-worklet-processor', VADProcessor) diff --git a/apps/stage-web/package.json b/apps/stage-web/package.json index ee757b086..5318366dd 100644 --- a/apps/stage-web/package.json +++ b/apps/stage-web/package.json @@ -37,6 +37,7 @@ "@stdlib/string-base-kebabcase": "^0.2.2", "@tresjs/cientos": "^4.3.1", "@tresjs/core": "^4.3.6", + "@unbird/eventa": "^0.0.5", "@valibot/to-json-schema": "1.0.0-rc.0", "@vueuse/core": "^13.8.0", "@vueuse/shared": "^13.8.0", diff --git a/apps/stage-web/src/pages/settings/modules/hearing.vue b/apps/stage-web/src/pages/settings/modules/hearing.vue index 896d8e5e8..d6fdfe3cd 100644 --- a/apps/stage-web/src/pages/settings/modules/hearing.vue +++ b/apps/stage-web/src/pages/settings/modules/hearing.vue @@ -146,6 +146,32 @@ async function loadVADModel() { } } +onStopRecord(async (recording) => { + if (!recording) + return + + try { + if (recording && recording.size > 0) { + audios.value.push(recording) + + const provider = await providersStore.getProviderInstance>(activeTranscriptionProvider.value) + if (!provider) { + throw new Error('Failed to initialize speech provider') + } + + // Get model from configuration or use default + const model = activeTranscriptionModel.value + const res = await hearingStore.transcription(provider, model, new File([recording], 'recording.wav')) + + transcriptions.value.push(res.text) + } + } + catch (err) { + error.value = err instanceof Error ? err.message : String(err) + console.error('Error generating transcription:', error.value) + } +}) + // Audio monitoring async function setupAudioMonitoring() { try { @@ -163,32 +189,6 @@ async function setupAudioMonitoring() { return } - onStopRecord(async (recording) => { - if (!recording) - return - - try { - if (recording && recording.size > 0) { - audios.value.push(recording) - - const provider = await providersStore.getProviderInstance>(activeTranscriptionProvider.value) - if (!provider) { - throw new Error('Failed to initialize speech provider') - } - - // Get model from configuration or use default - const model = activeTranscriptionModel.value - const res = await hearingStore.transcription(provider, model, new File([recording], 'recording.wav')) - - transcriptions.value.push(res.text) - } - } - catch (err) { - error.value = err instanceof Error ? err.message : String(err) - console.error('Error generating transcription:', error.value) - } - }) - const source = audioContext.value.createMediaStreamSource(stream.value) const analyzer = startAnalyzer(audioContext.value) diff --git a/apps/stage-web/src/workers/vad/process.worklet.ts b/apps/stage-web/src/workers/vad/process.worklet.ts index 899d933fe..684543d0c 100644 --- a/apps/stage-web/src/workers/vad/process.worklet.ts +++ b/apps/stage-web/src/workers/vad/process.worklet.ts @@ -50,4 +50,4 @@ class VADProcessor extends AudioWorkletProcessor { } } -registerProcessor('vad-processor', VADProcessor) +registerProcessor('vad-audio-worklet-processor', VADProcessor) diff --git a/apps/stage-web/src/workers/vad/vad.ts b/apps/stage-web/src/workers/vad/vad.ts index 17564402c..1cf21fd3c 100644 --- a/apps/stage-web/src/workers/vad/vad.ts +++ b/apps/stage-web/src/workers/vad/vad.ts @@ -186,14 +186,10 @@ export class VAD implements BaseVAD { // Update the state this.state = stateN - // Get the speech probability const speechProb = output.data[0] - this.emit('debug', { - message: 'VAD score', - data: { probability: speechProb }, - }) + this.emit('debug', { message: 'VAD score', data: { probability: speechProb } }) // Apply thresholds return ( @@ -269,22 +265,6 @@ export class VAD implements BaseVAD { this.sampleRateTensor = new Tensor('int64', [this.config.sampleRate], []) } } - - /** - * Get current VAD probability - */ - public getLastProbability(): number { - // This should be set after the last detectSpeech call - // For now, we'll return 0 as a placeholder - return 0 - } - - /** - * Check if currently recording speech - */ - public isCurrentlyRecording(): boolean { - return this.isRecording - } } /** diff --git a/cspell.config.yaml b/cspell.config.yaml index 3bd63cabe..ad8e24033 100644 --- a/cspell.config.yaml +++ b/cspell.config.yaml @@ -85,6 +85,7 @@ words: - elevenlabs - Equirectangular - esaxx + - eventa - Factorio - feaxios - formkit @@ -240,6 +241,7 @@ words: - tresjs - tsdown - turborepo + - unbird - unbundle - uncrypto - unhead @@ -260,6 +262,7 @@ words: - waapi - wavefile - webgpu + - webworkers - weeb - wgpu - wlipsync diff --git a/packages/stage-ui/src/components/Scenarios/Providers/TranscriptionPlayground.vue b/packages/stage-ui/src/components/Scenarios/Providers/TranscriptionPlayground.vue index 83e9cf8b7..b32ad16c9 100644 --- a/packages/stage-ui/src/components/Scenarios/Providers/TranscriptionPlayground.vue +++ b/packages/stage-ui/src/components/Scenarios/Providers/TranscriptionPlayground.vue @@ -6,6 +6,7 @@ import { until } from '@vueuse/core' import { computed, onUnmounted, ref, watch } from 'vue' import { useI18n } from 'vue-i18n' +import { useAudioAnalyzer } from '../../../composables/audio/audio-analyzer' import { useAudioRecorder } from '../../../composables/audio/audio-recorder' import { useAudioDevice } from '../../../composables/audio/device' import { LevelMeter, TestDummyMarker, ThresholdMeter } from '../../Gadgets' @@ -20,6 +21,8 @@ const props = defineProps<{ const { t } = useI18n() const { audioInputs, selectedAudioInput, stream, stopStream, startStream } = useAudioDevice() +const { volumeLevel, stopAnalyzer, startAnalyzer } = useAudioAnalyzer() +const { startRecord, stopRecord, onStopRecord } = useAudioRecorder(stream) const speakingThreshold = ref(25) // 0-100 (for volume-based fallback) const isMonitoring = ref(false) @@ -28,10 +31,8 @@ const isSpeaking = ref(false) const errorMessage = ref('') const audioContext = ref() -const analyser = ref() const dataArray = ref>() const animationFrame = ref() -const volumeLevel = ref(0) // 0-100 const audios = ref([]) const audioCleanups = ref<(() => void)[]>([]) @@ -44,94 +45,6 @@ const audioURLs = computed(() => { }) const transcriptions = ref([]) -const { startRecord, stopRecord, onStopRecord } = useAudioRecorder(stream) - -// Audio monitoring -async function setupAudioMonitoring() { - try { - // Clean up existing connections - await stopAudioMonitoring() - - await startStream() - await until(stream).toBeTruthy() - - // Create audio context - audioContext.value = new AudioContext() - const source = audioContext.value.createMediaStreamSource(stream.value!) - - // Create analyser for volume detection - analyser.value = audioContext.value.createAnalyser() - analyser.value.fftSize = 256 - analyser.value.smoothingTimeConstant = 0.3 - - // Connect audio graph - source.connect(analyser.value) - - // Set up data array for analysis - const bufferLength = analyser.value.frequencyBinCount - dataArray.value = new Uint8Array(bufferLength) - - // Start audio analysis loop - startAudioAnalysis() - } - catch (error) { - console.error('Error setting up audio monitoring:', error) - errorMessage.value = error instanceof Error ? error.message : String(error) - } -} - -async function stopAudioMonitoring() { - // Stop animation frame - if (animationFrame.value) { - cancelAnimationFrame(animationFrame.value) - animationFrame.value = undefined - } - - // Stop media stream - if (stream.value) { - stream.value.getTracks().forEach(track => track.stop()) - stream.value = undefined - } - - // Close audio context - if (audioContext.value) { - await audioContext.value.close() - audioContext.value = undefined - } - - await stopRecord() - await stopStream() - - analyser.value = undefined - dataArray.value = undefined - volumeLevel.value = 0 - isSpeaking.value = false -} - -function startAudioAnalysis() { - const analyze = () => { - if (!analyser.value || !dataArray.value) - return - - // Get frequency data for volume visualization - analyser.value.getByteFrequencyData(dataArray.value) - - // Calculate RMS volume level - let sum = 0 - for (let i = 0; i < dataArray.value.length; i++) { - sum += dataArray.value[i] * dataArray.value[i] - } - const rms = Math.sqrt(sum / dataArray.value.length) - volumeLevel.value = Math.min(100, (rms / 255) * 100 * 3) // Amplify for better visualization - - isSpeaking.value = volumeLevel.value > speakingThreshold.value - - animationFrame.value = requestAnimationFrame(analyze) - } - - analyze() -} - watch(selectedAudioInput, async () => { if (isMonitoring.value) { await setupAudioMonitoring() @@ -144,23 +57,69 @@ watch(audioInputs, () => { } }) +async function setupAudioMonitoring() { + try { + await stopAudioMonitoring() + + await startStream() + await until(stream).toBeTruthy() + + // Create audio context + audioContext.value = new AudioContext() + const source = audioContext.value.createMediaStreamSource(stream.value!) + const analyzer = startAnalyzer(audioContext.value) + source.connect(analyzer!) + + // Set up data array for analysis + const bufferLength = analyzer!.frequencyBinCount + dataArray.value = new Uint8Array(bufferLength) + } + catch (error) { + console.error('Error setting up audio monitoring:', error) + errorMessage.value = error instanceof Error ? error.message : String(error) + } +} + +async function stopAudioMonitoring() { + // Stop animation frame + if (animationFrame.value) { + cancelAnimationFrame(animationFrame.value) + animationFrame.value = undefined + } + if (stream.value) { + stream.value.getTracks().forEach(track => track.stop()) + stream.value = undefined + } + if (audioContext.value) { + await audioContext.value.close() + audioContext.value = undefined + } + + await stopRecord() + await stopStream() + await stopAnalyzer() + + dataArray.value = undefined + isSpeaking.value = false +} + +onStopRecord(async (recording) => { + try { + if (recording && recording.size > 0) { + audios.value.push(recording) + const res = await props.generateTranscription(new File([recording], 'recording.wav')) + transcriptions.value.push(res.text) + } + } + catch (err) { + errorMessage.value = err instanceof Error ? err.message : String(err) + console.error('Error generating transcription:', errorMessage.value) + } +}) + // Monitoring toggle async function toggleMonitoring() { if (!isMonitoring.value) { - onStopRecord(async (recording) => { - try { - if (recording && recording.size > 0) { - audios.value.push(recording) - const res = await props.generateTranscription(new File([recording], 'recording.wav')) - transcriptions.value.push(res.text) - } - } - catch (err) { - errorMessage.value = err instanceof Error ? err.message : String(err) - console.error('Error generating transcription:', errorMessage.value) - } - }) - await setupAudioMonitoring() await startRecord() isMonitoring.value = true diff --git a/packages/stage-ui/src/composables/audio/audio-recorder.ts b/packages/stage-ui/src/composables/audio/audio-recorder.ts index 68a662a66..288fbee36 100644 --- a/packages/stage-ui/src/composables/audio/audio-recorder.ts +++ b/packages/stage-ui/src/composables/audio/audio-recorder.ts @@ -1,21 +1,21 @@ import type { MaybeRefOrGetter } from 'vue' -import { toWav } from '@proj-airi/audio/encoding' import { until } from '@vueuse/core' -import { ref, shallowRef, toRef, watch } from 'vue' +import { BufferTarget, MediaStreamAudioTrackSource, Output, QUALITY_MEDIUM, WavOutputFormat } from 'mediabunny' +import { ref, shallowRef, toRef } from 'vue' + +async function getMediaStreamTrack(stream: MediaStream) { + return stream.getAudioTracks()[0] +} export function useAudioRecorder( media: MaybeRefOrGetter, ) { const mediaRef = toRef(media) const recording = shallowRef() - const isRecording = ref(false) - // Audio processing variables - const audioContext = ref() - const sourceNode = ref() - const processorNode = ref() // Using ScriptProcessorNode for wider compatibility - const audioData = ref[]>([]) + const mediaOutput = ref() + const mediaFormat = ref() const onStopRecordHooks = ref Promise>>([]) @@ -23,107 +23,42 @@ export function useAudioRecorder( onStopRecordHooks.value.push(callback) } - // Convert audio buffer to WAV format - function encodeWAV(samples: Float32Array[], sampleRate: number): Blob { - const view = toWav(samples[0].buffer, sampleRate) - return new Blob([view], { type: 'audio/wav' }) - } - async function startRecord() { await until(mediaRef).toBeTruthy() - if (!mediaRef.value) { - return - } - // Reset recording state - recording.value = undefined - audioData.value = [] - isRecording.value = true + const track = await getMediaStreamTrack(mediaRef.value!) + mediaOutput.value = new Output({ format: new WavOutputFormat(), target: new BufferTarget() }) - try { - // Create audio context and nodes - audioContext.value = new AudioContext() - sourceNode.value = audioContext.value.createMediaStreamSource(mediaRef.value) + const audioSource = new MediaStreamAudioTrackSource(track, { codec: 'pcm-f32', bitrate: QUALITY_MEDIUM }) + audioSource.errorPromise.catch(console.error) + mediaOutput.value.addAudioTrack(audioSource) - // Create script processor for audio processing - processorNode.value = audioContext.value.createScriptProcessor(4096, 1, 1) - - // Process audio data - processorNode.value.onaudioprocess = (e) => { - if (isRecording.value) { - const channelData = new Float32Array(e.inputBuffer.getChannelData(0)) - audioData.value.push(channelData) - } - } - - // Connect nodes - sourceNode.value.connect(processorNode.value) - processorNode.value.connect(audioContext.value.destination) - } - catch (error) { - console.error('Error starting audio recording:', error) - isRecording.value = false - } + mediaFormat.value = await mediaOutput.value.getMimeType() + await mediaOutput.value.start() } async function stopRecord() { - if (!isRecording.value || !audioContext.value) { + if (!mediaOutput.value) { return } - isRecording.value = false + await mediaOutput.value?.finalize() + const bufferTarget = mediaOutput.value?.target as BufferTarget | undefined + const buffer = bufferTarget!.buffer + const audioBlob = new Blob([buffer!], { type: mediaFormat.value }) - try { - // Disconnect and clean up audio nodes - if (processorNode.value) { - processorNode.value.disconnect() - processorNode.value = undefined - } - - if (sourceNode.value) { - sourceNode.value.disconnect() - sourceNode.value = undefined - } - - // Create WAV from recorded data - if (audioData.value.length > 0) { - recording.value = encodeWAV(audioData.value, audioContext.value.sampleRate) - - // Call hooks with the recording - for (const hook of onStopRecordHooks.value) { - await hook(recording.value) - } - } - else { - recording.value = undefined - } - - // Close audio context - await audioContext.value.close() - audioContext.value = undefined - } - catch (error) { - console.error('Error stopping audio recording:', error) + for (const hook of onStopRecordHooks.value) { + hook(audioBlob) } - return audioData.value + return audioBlob } - watch(mediaRef, () => { - if (isRecording.value) { - stopRecord().then(() => { - if (mediaRef.value && mediaRef.value.active) { - startRecord() - } - }) - } - }) - return { startRecord, stopRecord, onStopRecord, + recording, - isRecording, } } diff --git a/packages/stage-ui/src/libs/audio/vad.ts b/packages/stage-ui/src/libs/audio/vad.ts index aeae52e7f..d581bb7a3 100644 --- a/packages/stage-ui/src/libs/audio/vad.ts +++ b/packages/stage-ui/src/libs/audio/vad.ts @@ -127,6 +127,12 @@ export function createVADStates(vad: BaseVAD, vadAudioWorkletUrl: string, option } function stop() { + if (audioContext) { + audioContext.suspend() + } + } + + function dispose() { if (sourceNode) { sourceNode.disconnect() sourceNode = null @@ -139,14 +145,6 @@ export function createVADStates(vad: BaseVAD, vadAudioWorkletUrl: string, option mediaStream.getTracks().forEach(track => track.stop()) mediaStream = null } - if (audioContext) { - audioContext.suspend() - } - } - - function dispose() { - stop() - if (audioContext && audioContext.state !== 'closed') { audioContext.close() } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5bafd0855..6af61507b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -746,6 +746,9 @@ importers: '@tresjs/core': specifier: ^4.3.6 version: 4.3.6(three@0.179.1)(typescript@5.9.2)(vue@3.5.20(typescript@5.9.2)) + '@unbird/eventa': + specifier: ^0.0.5 + version: 0.0.5(web-worker@1.5.0) '@valibot/to-json-schema': specifier: 1.0.0-rc.0 version: 1.0.0-rc.0(valibot@1.0.0-beta.9(typescript@5.9.2)) @@ -883,7 +886,7 @@ importers: version: 4.5.1(vue@3.5.20(typescript@5.9.2)) vue-sonner: specifier: ^2.0.8 - version: 2.0.8(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.0)(@types/node@24.3.0)(@vue/compiler-sfc@3.5.20)(bufferutil@4.0.9)(db0@0.3.2(drizzle-orm@0.44.5(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7)))(drizzle-orm@0.44.5(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7))(encoding@0.1.13)(eslint@9.34.0(jiti@2.5.1))(ioredis@5.7.0)(less@4.4.1)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rolldown-vite@7.1.5(@types/node@24.3.0)(esbuild@0.25.9)(jiti@2.5.1)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(rolldown@1.0.0-beta.34)(rollup@2.79.2)(terser@5.43.1)(tsx@4.20.5)(typescript@5.9.2)(utf-8-validate@5.0.10)(vue-tsc@3.0.6(typescript@5.9.2))(xml2js@0.6.2)(yaml@2.8.1) + version: 2.0.8(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.0)(@types/node@24.3.0)(@vue/compiler-sfc@3.5.20)(bufferutil@4.0.9)(db0@0.3.2(drizzle-orm@0.44.5(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7)))(drizzle-orm@0.44.5(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7))(encoding@0.1.13)(eslint@9.34.0(jiti@2.5.1))(ioredis@5.7.0)(less@4.4.1)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rolldown-vite@7.1.5(@types/node@24.3.0)(esbuild@0.25.9)(jiti@2.5.1)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(rolldown@1.0.0-beta.34)(rollup@4.49.0)(terser@5.43.1)(tsx@4.20.5)(typescript@5.9.2)(utf-8-validate@5.0.10)(vue-tsc@3.0.6(typescript@5.9.2))(xml2js@0.6.2)(yaml@2.8.1) workbox-window: specifier: ^7.3.0 version: 7.3.0 @@ -923,7 +926,7 @@ importers: version: 1.2.30 '@intlify/unplugin-vue-i18n': specifier: ^6.0.8 - version: 6.0.8(@vue/compiler-dom@3.5.20)(eslint@9.34.0(jiti@2.5.1))(rollup@2.79.2)(typescript@5.9.2)(vue-i18n@11.1.11(vue@3.5.20(typescript@5.9.2)))(vue@3.5.20(typescript@5.9.2)) + version: 6.0.8(@vue/compiler-dom@3.5.20)(eslint@9.34.0(jiti@2.5.1))(rollup@4.49.0)(typescript@5.9.2)(vue-i18n@11.1.11(vue@3.5.20(typescript@5.9.2)))(vue@3.5.20(typescript@5.9.2)) '@proj-airi/lobe-icons': specifier: ^1.0.10 version: 1.0.10 @@ -977,22 +980,22 @@ importers: version: 4.4.1 unplugin-info: specifier: ^1.2.4 - version: 1.2.4(@nuxt/kit@4.0.3(magicast@0.3.5))(@nuxt/schema@4.0.3)(esbuild@0.25.9)(rolldown-vite@7.1.5(@types/node@24.3.0)(esbuild@0.25.9)(jiti@2.5.1)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(rollup@2.79.2) + version: 1.2.4(@nuxt/kit@4.0.3(magicast@0.3.5))(@nuxt/schema@4.0.3)(esbuild@0.25.9)(rolldown-vite@7.1.5(@types/node@24.3.0)(esbuild@0.25.9)(jiti@2.5.1)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(rollup@4.49.0) unplugin-vue-macros: specifier: ^2.14.5 - version: 2.14.5(@vueuse/core@13.8.0(vue@3.5.20(typescript@5.9.2)))(esbuild@0.25.9)(rolldown-vite@7.1.5(@types/node@24.3.0)(esbuild@0.25.9)(jiti@2.5.1)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(rolldown@1.0.0-beta.34)(rollup@2.79.2)(typescript@5.9.2)(vue-tsc@3.0.6(typescript@5.9.2))(vue@3.5.20(typescript@5.9.2)) + version: 2.14.5(@vueuse/core@13.8.0(vue@3.5.20(typescript@5.9.2)))(esbuild@0.25.9)(rolldown-vite@7.1.5(@types/node@24.3.0)(esbuild@0.25.9)(jiti@2.5.1)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(rolldown@1.0.0-beta.34)(rollup@4.49.0)(typescript@5.9.2)(vue-tsc@3.0.6(typescript@5.9.2))(vue@3.5.20(typescript@5.9.2)) unplugin-vue-router: specifier: ^0.15.0 version: 0.15.0(@vue/compiler-sfc@3.5.20)(typescript@5.9.2)(vue-router@4.5.1(vue@3.5.20(typescript@5.9.2)))(vue@3.5.20(typescript@5.9.2)) unplugin-yaml: specifier: ^3.0.4 - version: 3.0.4(@nuxt/kit@4.0.3(magicast@0.3.5))(@nuxt/schema@4.0.3)(astro@5.10.1(@netlify/blobs@9.1.2)(@types/node@24.3.0)(db0@0.3.2(drizzle-orm@0.44.5(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7)))(encoding@0.1.13)(ioredis@5.7.0)(jiti@2.5.1)(less@4.4.1)(lightningcss@1.30.1)(rollup@2.79.2)(terser@5.43.1)(tsx@4.20.5)(typescript@5.9.2)(yaml@2.8.1))(esbuild@0.25.9)(rolldown-vite@7.1.5(@types/node@24.3.0)(esbuild@0.25.9)(jiti@2.5.1)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(rolldown@1.0.0-beta.34)(rollup@2.79.2) + version: 3.0.4(@nuxt/kit@4.0.3(magicast@0.3.5))(@nuxt/schema@4.0.3)(astro@5.10.1(@netlify/blobs@9.1.2)(@types/node@24.3.0)(db0@0.3.2(drizzle-orm@0.44.5(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7)))(encoding@0.1.13)(ioredis@5.7.0)(jiti@2.5.1)(less@4.4.1)(lightningcss@1.30.1)(rollup@4.49.0)(terser@5.43.1)(tsx@4.20.5)(typescript@5.9.2)(yaml@2.8.1))(esbuild@0.25.9)(rolldown-vite@7.1.5(@types/node@24.3.0)(esbuild@0.25.9)(jiti@2.5.1)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(rolldown@1.0.0-beta.34)(rollup@4.49.0) vite: specifier: catalog:rolldown-vite version: rolldown-vite@7.1.5(@types/node@24.3.0)(esbuild@0.25.9)(jiti@2.5.1)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) vite-bundle-visualizer: specifier: ^1.2.1 - version: 1.2.1(rollup@2.79.2) + version: 1.2.1(rollup@4.49.0) vite-plugin-pwa: specifier: ^1.0.3 version: 1.0.3(rolldown-vite@7.1.5(@types/node@24.3.0)(esbuild@0.25.9)(jiti@2.5.1)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0) @@ -1137,7 +1140,7 @@ importers: version: 0.1.3 unplugin-yaml: specifier: ^3.0.4 - version: 3.0.4(@nuxt/kit@4.0.3(magicast@0.3.5))(@nuxt/schema@4.0.3)(astro@5.10.1(@netlify/blobs@9.1.2)(@types/node@24.3.0)(db0@0.3.2(drizzle-orm@0.44.5(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7)))(encoding@0.1.13)(ioredis@5.7.0)(jiti@2.5.1)(less@4.4.1)(lightningcss@1.30.1)(rollup@4.49.0)(terser@5.43.1)(tsx@4.20.5)(typescript@5.9.2)(yaml@2.8.1))(esbuild@0.25.9)(rolldown@1.0.0-beta.34)(rollup@4.49.0)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.4.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) + version: 3.0.4(@nuxt/kit@4.0.3(magicast@0.3.5))(@nuxt/schema@4.0.3)(astro@5.10.1(@netlify/blobs@9.1.2)(@types/node@24.3.0)(db0@0.3.2(drizzle-orm@0.44.5(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7)))(ioredis@5.7.0)(jiti@2.5.1)(less@4.4.1)(lightningcss@1.30.1)(rollup@4.49.0)(terser@5.43.1)(tsx@4.20.5)(typescript@5.9.2)(yaml@2.8.1))(esbuild@0.25.9)(rolldown@1.0.0-beta.34)(rollup@4.49.0)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.4.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) vitepress: specifier: ^2.0.0-alpha.12 version: 2.0.0-alpha.12(@types/node@24.3.0)(change-case@5.4.4)(fuse.js@7.1.0)(jiti@2.5.1)(jwt-decode@4.0.0)(less@4.4.1)(lightningcss@1.30.1)(nprogress@0.2.0)(postcss@8.5.6)(terser@5.43.1)(tsx@4.20.5)(typescript@5.9.2)(yaml@2.8.1) @@ -1145,49 +1148,6 @@ importers: specifier: ^3.0.6 version: 3.0.6(typescript@5.9.2) - packages/audia: - dependencies: - '@vueuse/core': - specifier: ^13.8.0 - version: 13.8.0(vue@3.5.20(typescript@5.9.2)) - mediabunny: - specifier: ^1.11.2 - version: 1.11.2 - vue: - specifier: ^3.5.20 - version: 3.5.20(typescript@5.9.2) - devDependencies: - '@ffmpeg/ffmpeg': - specifier: ^0.12.15 - version: 0.12.15 - '@ffmpeg/util': - specifier: ^0.12.2 - version: 0.12.2 - '@proj-airi/ui': - specifier: workspace:^ - version: link:../ui - '@unocss/reset': - specifier: ^66.4.2 - version: 66.4.2 - '@vitejs/plugin-vue': - specifier: ^6.0.1 - version: 6.0.1(rolldown-vite@7.1.5(@types/node@24.3.0)(esbuild@0.25.9)(jiti@2.5.1)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(vue@3.5.20(typescript@5.9.2)) - unplugin-vue-router: - specifier: ^0.15.0 - version: 0.15.0(@vue/compiler-sfc@3.5.20)(typescript@5.9.2)(vue-router@4.5.1(vue@3.5.20(typescript@5.9.2)))(vue@3.5.20(typescript@5.9.2)) - vite: - specifier: catalog:rolldown-vite - version: rolldown-vite@7.1.5(@types/node@24.3.0)(esbuild@0.25.9)(jiti@2.5.1)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) - vite-plugin-vue-devtools: - specifier: ^8.0.1 - version: 8.0.1(rolldown-vite@7.1.5(@types/node@24.3.0)(esbuild@0.25.9)(jiti@2.5.1)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(vue@3.5.20(typescript@5.9.2)) - vue-router: - specifier: ^4.5.1 - version: 4.5.1(vue@3.5.20(typescript@5.9.2)) - vue-tsc: - specifier: ^3.0.6 - version: 3.0.6(typescript@5.9.2) - packages/audio: dependencies: '@alexanderolsen/libsamplerate-js': @@ -3728,18 +3688,6 @@ packages: cpu: [x64] os: [win32] - '@ffmpeg/ffmpeg@0.12.15': - resolution: {integrity: sha512-1C8Obr4GsN3xw+/1Ww6PFM84wSQAGsdoTuTWPOj2OizsRDLT4CXTaVjPhkw6ARyDus1B9X/L2LiXHqYYsGnRFw==} - engines: {node: '>=18.x'} - - '@ffmpeg/types@0.12.4': - resolution: {integrity: sha512-k9vJQNBGTxE5AhYDtOYR5rO5fKsspbg51gbcwtbkw2lCdoIILzklulcjJfIDwrtn7XhDeF2M+THwJ2FGrLeV6A==} - engines: {node: '>=16.x'} - - '@ffmpeg/util@0.12.2': - resolution: {integrity: sha512-ouyoW+4JB7WxjeZ2y6KpRvB+dLp7Cp4ro8z0HIVpZVCM7AwFlHa0c4R8Y/a4M3wMqATpYKhC7lSFHQ0T11MEDw==} - engines: {node: '>=18.x'} - '@floating-ui/core@1.6.8': resolution: {integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==} @@ -6713,6 +6661,20 @@ packages: resolution: {integrity: sha512-+GeGMebMCy0elMNg67LRNoVnUFPIm37iu5CmHESVx56/9Jsfdpsvbv605DQ81Pi/x11IdKUsS5nzgTYbCQU9fg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@unbird/eventa@0.0.5': + resolution: {integrity: sha512-2v9agB95DRBcvS2Wsa6E3PVvnvDMYYN9lawrEBJlcFUmybjVpAQW3l8qusPMGVLMPxuvYopxGUHg5N0QK/9Whg==} + peerDependencies: + electron: '>=30' + h3: 2.0.0-beta.1 + web-worker: ^1.5.0 + peerDependenciesMeta: + electron: + optional: true + h3: + optional: true + web-worker: + optional: true + '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} @@ -16839,14 +16801,6 @@ snapshots: '@ffmpeg-installer/win32-x64@4.1.0': optional: true - '@ffmpeg/ffmpeg@0.12.15': - dependencies: - '@ffmpeg/types': 0.12.4 - - '@ffmpeg/types@0.12.4': {} - - '@ffmpeg/util@0.12.2': {} - '@floating-ui/core@1.6.8': dependencies: '@floating-ui/utils': 0.2.9 @@ -17280,33 +17234,6 @@ snapshots: '@intlify/shared@11.1.11': {} - '@intlify/unplugin-vue-i18n@6.0.8(@vue/compiler-dom@3.5.20)(eslint@9.34.0(jiti@2.5.1))(rollup@2.79.2)(typescript@5.9.2)(vue-i18n@11.1.11(vue@3.5.20(typescript@5.9.2)))(vue@3.5.20(typescript@5.9.2))': - dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.34.0(jiti@2.5.1)) - '@intlify/bundle-utils': 10.0.1(vue-i18n@11.1.11(vue@3.5.20(typescript@5.9.2))) - '@intlify/shared': 11.1.11 - '@intlify/vue-i18n-extensions': 8.0.0(@intlify/shared@11.1.11)(@vue/compiler-dom@3.5.20)(vue-i18n@11.1.11(vue@3.5.20(typescript@5.9.2)))(vue@3.5.20(typescript@5.9.2)) - '@rollup/pluginutils': 5.2.0(rollup@2.79.2) - '@typescript-eslint/scope-manager': 8.41.0 - '@typescript-eslint/typescript-estree': 8.41.0(typescript@5.9.2) - debug: 4.4.1 - fast-glob: 3.3.3 - 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.1 - vue: 3.5.20(typescript@5.9.2) - optionalDependencies: - vue-i18n: 11.1.11(vue@3.5.20(typescript@5.9.2)) - transitivePeerDependencies: - - '@vue/compiler-dom' - - eslint - - rollup - - supports-color - - typescript - '@intlify/unplugin-vue-i18n@6.0.8(@vue/compiler-dom@3.5.20)(eslint@9.34.0(jiti@2.5.1))(rollup@4.49.0)(typescript@5.9.2)(vue-i18n@11.1.11(vue@3.5.20(typescript@5.9.2)))(vue@3.5.20(typescript@5.9.2))': dependencies: '@eslint-community/eslint-utils': 4.7.0(eslint@9.34.0(jiti@2.5.1)) @@ -17960,63 +17887,6 @@ snapshots: transitivePeerDependencies: - magicast - '@nuxt/vite-builder@4.0.3(@types/node@24.3.0)(eslint@9.34.0(jiti@2.5.1))(less@4.4.1)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.34)(rollup@2.79.2)(terser@5.43.1)(tsx@4.20.5)(typescript@5.9.2)(vue-tsc@3.0.6(typescript@5.9.2))(vue@3.5.20(typescript@5.9.2))(yaml@2.8.1)': - dependencies: - '@nuxt/kit': 4.0.3(magicast@0.3.5) - '@rollup/plugin-replace': 6.0.2(rollup@2.79.2) - '@vitejs/plugin-vue': 6.0.1(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.4.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(vue@3.5.20(typescript@5.9.2)) - '@vitejs/plugin-vue-jsx': 5.1.1(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.4.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(vue@3.5.20(typescript@5.9.2)) - autoprefixer: 10.4.21(postcss@8.5.6) - consola: 3.4.2 - cssnano: 7.1.1(postcss@8.5.6) - defu: 6.1.4 - esbuild: 0.25.9 - escape-string-regexp: 5.0.0 - exsolve: 1.0.7 - get-port-please: 3.2.0 - h3: 1.15.4 - jiti: 2.5.1 - knitwork: 1.2.0 - magic-string: 0.30.18 - mlly: 1.8.0 - mocked-exports: 0.1.1 - pathe: 2.0.3 - pkg-types: 2.3.0 - postcss: 8.5.6 - rollup-plugin-visualizer: 6.0.3(rolldown@1.0.0-beta.34)(rollup@2.79.2) - std-env: 3.9.0 - ufo: 1.6.1 - unenv: 2.0.0-rc.19 - vite: 7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.4.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) - vite-node: 3.2.4(@types/node@24.3.0)(jiti@2.5.1)(less@4.4.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) - vite-plugin-checker: 0.10.3(eslint@9.34.0(jiti@2.5.1))(optionator@0.9.4)(typescript@5.9.2)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.4.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(vue-tsc@3.0.6(typescript@5.9.2)) - vue: 3.5.20(typescript@5.9.2) - vue-bundle-renderer: 2.1.2 - transitivePeerDependencies: - - '@biomejs/biome' - - '@types/node' - - eslint - - less - - lightningcss - - magicast - - meow - - optionator - - rolldown - - rollup - - sass - - sass-embedded - - stylelint - - stylus - - sugarss - - supports-color - - terser - - tsx - - typescript - - vls - - vti - - vue-tsc - - yaml - '@nuxt/vite-builder@4.0.3(@types/node@24.3.0)(eslint@9.34.0(jiti@2.5.1))(less@4.4.1)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.34)(rollup@4.49.0)(terser@5.43.1)(tsx@4.20.5)(typescript@5.9.2)(vue-tsc@3.0.6(typescript@5.9.2))(vue@3.5.20(typescript@5.9.2))(yaml@2.8.1)': dependencies: '@nuxt/kit': 4.0.3(magicast@0.3.5) @@ -19626,13 +19496,6 @@ snapshots: magic-string: 0.25.9 rollup: 2.79.2 - '@rollup/plugin-replace@6.0.2(rollup@2.79.2)': - dependencies: - '@rollup/pluginutils': 5.2.0(rollup@2.79.2) - magic-string: 0.30.18 - optionalDependencies: - rollup: 2.79.2 - '@rollup/plugin-replace@6.0.2(rollup@4.49.0)': dependencies: '@rollup/pluginutils': 5.2.0(rollup@4.49.0) @@ -20316,6 +20179,13 @@ snapshots: '@typescript-eslint/types': 8.41.0 eslint-visitor-keys: 4.2.1 + '@unbird/eventa@0.0.5(web-worker@1.5.0)': + dependencies: + nanoid: 5.1.5 + picomatch: 4.0.3 + optionalDependencies: + web-worker: 1.5.0 + '@ungap/structured-clone@1.3.0': {} '@unhead/vue@2.0.14(vue@3.5.20(typescript@5.9.2))': @@ -21882,108 +21752,6 @@ snapshots: astring@1.9.0: {} - astro@5.10.1(@netlify/blobs@9.1.2)(@types/node@24.3.0)(db0@0.3.2(drizzle-orm@0.44.5(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7)))(encoding@0.1.13)(ioredis@5.7.0)(jiti@2.5.1)(less@4.4.1)(lightningcss@1.30.1)(rollup@2.79.2)(terser@5.43.1)(tsx@4.20.5)(typescript@5.9.2)(yaml@2.8.1): - dependencies: - '@astrojs/compiler': 2.12.2 - '@astrojs/internal-helpers': 0.6.1 - '@astrojs/markdown-remark': 6.3.2 - '@astrojs/telemetry': 3.3.0 - '@capsizecss/unpack': 2.4.0(encoding@0.1.13) - '@oslojs/encoding': 1.1.0 - '@rollup/pluginutils': 5.2.0(rollup@2.79.2) - acorn: 8.15.0 - aria-query: 5.3.2 - axobject-query: 4.1.0 - boxen: 8.0.1 - ci-info: 4.3.0 - clsx: 2.1.1 - common-ancestor-path: 1.0.1 - cookie: 1.0.2 - cssesc: 3.0.0 - debug: 4.4.1 - deterministic-object-hash: 2.0.2 - devalue: 5.3.2 - diff: 5.2.0 - dlv: 1.1.3 - dset: 3.1.4 - es-module-lexer: 1.7.0 - esbuild: 0.25.9 - estree-walker: 3.0.3 - flattie: 1.1.1 - fontace: 0.3.0 - github-slugger: 2.0.0 - html-escaper: 3.0.3 - http-cache-semantics: 4.2.0 - import-meta-resolve: 4.1.0 - js-yaml: 4.1.0 - kleur: 4.1.5 - magic-string: 0.30.18 - magicast: 0.3.5 - mrmime: 2.0.1 - neotraverse: 0.6.18 - p-limit: 6.2.0 - p-queue: 8.1.0 - package-manager-detector: 1.3.0 - picomatch: 4.0.3 - prompts: 2.4.2 - rehype: 13.0.2 - semver: 7.7.2 - shiki: 3.12.0 - tinyexec: 0.3.2 - tinyglobby: 0.2.14 - tsconfck: 3.1.6(typescript@5.9.2) - ultrahtml: 1.6.0 - unifont: 0.5.2 - unist-util-visit: 5.0.0 - unstorage: 1.17.0(@netlify/blobs@9.1.2)(db0@0.3.2(drizzle-orm@0.44.5(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7)))(ioredis@5.7.0) - vfile: 6.0.3 - vite: 6.3.5(@types/node@24.3.0)(jiti@2.5.1)(less@4.4.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) - vitefu: 1.1.1(vite@6.3.5(@types/node@24.3.0)(jiti@2.5.1)(less@4.4.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) - xxhash-wasm: 1.1.0 - yargs-parser: 21.1.1 - yocto-spinner: 0.2.3 - zod: 3.25.76 - zod-to-json-schema: 3.24.6(zod@3.25.76) - zod-to-ts: 1.2.0(typescript@5.9.2)(zod@3.25.76) - optionalDependencies: - sharp: 0.33.5 - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@deno/kv' - - '@netlify/blobs' - - '@planetscale/database' - - '@types/node' - - '@upstash/redis' - - '@vercel/blob' - - '@vercel/functions' - - '@vercel/kv' - - aws4fetch - - db0 - - encoding - - idb-keyval - - ioredis - - jiti - - less - - lightningcss - - rollup - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - typescript - - uploadthing - - yaml - optional: true - astro@5.10.1(@netlify/blobs@9.1.2)(@types/node@24.3.0)(db0@0.3.2(drizzle-orm@0.44.5(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7)))(encoding@0.1.13)(ioredis@5.7.0)(jiti@2.5.1)(less@4.4.1)(lightningcss@1.30.1)(rollup@4.49.0)(terser@5.43.1)(tsx@4.20.5)(typescript@5.9.2)(yaml@2.8.1): dependencies: '@astrojs/compiler': 2.12.2 @@ -22086,108 +21854,6 @@ snapshots: - yaml optional: true - astro@5.10.1(@netlify/blobs@9.1.2)(@types/node@24.3.0)(db0@0.3.2(drizzle-orm@0.44.5(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7)))(ioredis@5.7.0)(jiti@2.5.1)(less@4.4.1)(lightningcss@1.30.1)(rollup@4.49.0)(terser@5.43.1)(tsx@4.20.5)(typescript@5.9.2)(yaml@2.8.1): - dependencies: - '@astrojs/compiler': 2.12.2 - '@astrojs/internal-helpers': 0.6.1 - '@astrojs/markdown-remark': 6.3.2 - '@astrojs/telemetry': 3.3.0 - '@capsizecss/unpack': 2.4.0(encoding@0.1.13) - '@oslojs/encoding': 1.1.0 - '@rollup/pluginutils': 5.2.0(rollup@4.49.0) - acorn: 8.15.0 - aria-query: 5.3.2 - axobject-query: 4.1.0 - boxen: 8.0.1 - ci-info: 4.3.0 - clsx: 2.1.1 - common-ancestor-path: 1.0.1 - cookie: 1.0.2 - cssesc: 3.0.0 - debug: 4.4.1 - deterministic-object-hash: 2.0.2 - devalue: 5.3.2 - diff: 5.2.0 - dlv: 1.1.3 - dset: 3.1.4 - es-module-lexer: 1.7.0 - esbuild: 0.25.9 - estree-walker: 3.0.3 - flattie: 1.1.1 - fontace: 0.3.0 - github-slugger: 2.0.0 - html-escaper: 3.0.3 - http-cache-semantics: 4.2.0 - import-meta-resolve: 4.1.0 - js-yaml: 4.1.0 - kleur: 4.1.5 - magic-string: 0.30.18 - magicast: 0.3.5 - mrmime: 2.0.1 - neotraverse: 0.6.18 - p-limit: 6.2.0 - p-queue: 8.1.0 - package-manager-detector: 1.3.0 - picomatch: 4.0.3 - prompts: 2.4.2 - rehype: 13.0.2 - semver: 7.7.2 - shiki: 3.12.0 - tinyexec: 0.3.2 - tinyglobby: 0.2.14 - tsconfck: 3.1.6(typescript@5.9.2) - ultrahtml: 1.6.0 - unifont: 0.5.2 - unist-util-visit: 5.0.0 - unstorage: 1.17.0(@netlify/blobs@9.1.2)(db0@0.3.2(drizzle-orm@0.44.5(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7)))(ioredis@5.7.0) - vfile: 6.0.3 - vite: 6.3.5(@types/node@24.3.0)(jiti@2.5.1)(less@4.4.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) - vitefu: 1.1.1(vite@6.3.5(@types/node@24.3.0)(jiti@2.5.1)(less@4.4.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) - xxhash-wasm: 1.1.0 - yargs-parser: 21.1.1 - yocto-spinner: 0.2.3 - zod: 3.25.76 - zod-to-json-schema: 3.24.6(zod@3.25.76) - zod-to-ts: 1.2.0(typescript@5.9.2)(zod@3.25.76) - optionalDependencies: - sharp: 0.33.5 - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@deno/kv' - - '@netlify/blobs' - - '@planetscale/database' - - '@types/node' - - '@upstash/redis' - - '@vercel/blob' - - '@vercel/functions' - - '@vercel/kv' - - aws4fetch - - db0 - - encoding - - idb-keyval - - ioredis - - jiti - - less - - lightningcss - - rollup - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - typescript - - uploadthing - - yaml - optional: true - async-mutex@0.3.2: dependencies: tslib: 2.8.1 @@ -26785,7 +26451,7 @@ snapshots: dependencies: boolbase: 1.0.0 - nuxt@4.0.3(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.0)(@types/node@24.3.0)(@vue/compiler-sfc@3.5.20)(bufferutil@4.0.9)(db0@0.3.2(drizzle-orm@0.44.5(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7)))(drizzle-orm@0.44.5(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7))(encoding@0.1.13)(eslint@9.34.0(jiti@2.5.1))(ioredis@5.7.0)(less@4.4.1)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rolldown-vite@7.1.5(@types/node@24.3.0)(esbuild@0.25.9)(jiti@2.5.1)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(rolldown@1.0.0-beta.34)(rollup@2.79.2)(terser@5.43.1)(tsx@4.20.5)(typescript@5.9.2)(utf-8-validate@5.0.10)(vue-tsc@3.0.6(typescript@5.9.2))(xml2js@0.6.2)(yaml@2.8.1): + nuxt@4.0.3(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.0)(@types/node@24.3.0)(@vue/compiler-sfc@3.5.20)(bufferutil@4.0.9)(db0@0.3.2(drizzle-orm@0.44.5(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7)))(drizzle-orm@0.44.5(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7))(encoding@0.1.13)(eslint@9.34.0(jiti@2.5.1))(ioredis@5.7.0)(less@4.4.1)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rolldown-vite@7.1.5(@types/node@24.3.0)(esbuild@0.25.9)(jiti@2.5.1)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(rolldown@1.0.0-beta.34)(rollup@4.49.0)(terser@5.43.1)(tsx@4.20.5)(typescript@5.9.2)(utf-8-validate@5.0.10)(vue-tsc@3.0.6(typescript@5.9.2))(xml2js@0.6.2)(yaml@2.8.1): dependencies: '@nuxt/cli': 3.28.0(magicast@0.3.5) '@nuxt/devalue': 2.0.2 @@ -26793,7 +26459,7 @@ snapshots: '@nuxt/kit': 4.0.3(magicast@0.3.5) '@nuxt/schema': 4.0.3 '@nuxt/telemetry': 2.6.6(magicast@0.3.5) - '@nuxt/vite-builder': 4.0.3(@types/node@24.3.0)(eslint@9.34.0(jiti@2.5.1))(less@4.4.1)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.34)(rollup@2.79.2)(terser@5.43.1)(tsx@4.20.5)(typescript@5.9.2)(vue-tsc@3.0.6(typescript@5.9.2))(vue@3.5.20(typescript@5.9.2))(yaml@2.8.1) + '@nuxt/vite-builder': 4.0.3(@types/node@24.3.0)(eslint@9.34.0(jiti@2.5.1))(less@4.4.1)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.34)(rollup@4.49.0)(terser@5.43.1)(tsx@4.20.5)(typescript@5.9.2)(vue-tsc@3.0.6(typescript@5.9.2))(vue@3.5.20(typescript@5.9.2))(yaml@2.8.1) '@unhead/vue': 2.0.14(vue@3.5.20(typescript@5.9.2)) '@vue/shared': 3.5.20 c12: 3.2.0(magicast@0.3.5) @@ -28808,15 +28474,6 @@ snapshots: '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.34 '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.34 - rollup-plugin-visualizer@5.11.0(rollup@2.79.2): - dependencies: - open: 8.4.2 - picomatch: 2.3.1 - source-map: 0.7.4 - yargs: 17.7.2 - optionalDependencies: - rollup: 2.79.2 - rollup-plugin-visualizer@5.11.0(rollup@4.49.0): dependencies: open: 8.4.2 @@ -28826,16 +28483,6 @@ snapshots: optionalDependencies: rollup: 4.49.0 - rollup-plugin-visualizer@6.0.3(rolldown@1.0.0-beta.34)(rollup@2.79.2): - dependencies: - open: 8.4.2 - picomatch: 4.0.3 - source-map: 0.7.4 - yargs: 17.7.2 - optionalDependencies: - rolldown: 1.0.0-beta.34 - rollup: 2.79.2 - rollup-plugin-visualizer@6.0.3(rolldown@1.0.0-beta.34)(rollup@4.49.0): dependencies: open: 8.4.2 @@ -30102,14 +29749,6 @@ snapshots: unpipe@1.0.0: {} - unplugin-combine@1.2.1(esbuild@0.25.9)(rolldown-vite@7.1.5(@types/node@24.3.0)(esbuild@0.25.9)(jiti@2.5.1)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(rolldown@1.0.0-beta.34)(rollup@2.79.2)(unplugin@1.16.1): - optionalDependencies: - esbuild: 0.25.9 - rolldown: 1.0.0-beta.34 - rollup: 2.79.2 - unplugin: 1.16.1 - vite: rolldown-vite@7.1.5(@types/node@24.3.0)(esbuild@0.25.9)(jiti@2.5.1)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) - unplugin-combine@1.2.1(esbuild@0.25.9)(rolldown-vite@7.1.5(@types/node@24.3.0)(esbuild@0.25.9)(jiti@2.5.1)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(rolldown@1.0.0-beta.34)(rollup@4.49.0)(unplugin@1.16.1): optionalDependencies: esbuild: 0.25.9 @@ -30118,21 +29757,6 @@ snapshots: unplugin: 1.16.1 vite: rolldown-vite@7.1.5(@types/node@24.3.0)(esbuild@0.25.9)(jiti@2.5.1)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) - unplugin-info@1.2.4(@nuxt/kit@4.0.3(magicast@0.3.5))(@nuxt/schema@4.0.3)(esbuild@0.25.9)(rolldown-vite@7.1.5(@types/node@24.3.0)(esbuild@0.25.9)(jiti@2.5.1)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(rollup@2.79.2): - dependencies: - ci-info: 4.3.0 - git-url-parse: 16.1.0 - simple-git: 3.28.0 - unplugin: 2.3.9 - optionalDependencies: - '@nuxt/kit': 4.0.3(magicast@0.3.5) - '@nuxt/schema': 4.0.3 - esbuild: 0.25.9 - rollup: 2.79.2 - vite: rolldown-vite@7.1.5(@types/node@24.3.0)(esbuild@0.25.9)(jiti@2.5.1)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) - transitivePeerDependencies: - - supports-color - unplugin-info@1.2.4(@nuxt/kit@4.0.3(magicast@0.3.5))(@nuxt/schema@4.0.3)(esbuild@0.25.9)(rolldown-vite@7.1.5(@types/node@24.3.0)(esbuild@0.25.9)(jiti@2.5.1)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(rollup@4.49.0): dependencies: ci-info: 4.3.0 @@ -30201,52 +29825,6 @@ snapshots: transitivePeerDependencies: - vue - unplugin-vue-macros@2.14.5(@vueuse/core@13.8.0(vue@3.5.20(typescript@5.9.2)))(esbuild@0.25.9)(rolldown-vite@7.1.5(@types/node@24.3.0)(esbuild@0.25.9)(jiti@2.5.1)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(rolldown@1.0.0-beta.34)(rollup@2.79.2)(typescript@5.9.2)(vue-tsc@3.0.6(typescript@5.9.2))(vue@3.5.20(typescript@5.9.2)): - dependencies: - '@vue-macros/better-define': 1.11.4(vue@3.5.20(typescript@5.9.2)) - '@vue-macros/boolean-prop': 0.5.5(vue@3.5.20(typescript@5.9.2)) - '@vue-macros/chain-call': 0.4.5(vue@3.5.20(typescript@5.9.2)) - '@vue-macros/common': 1.16.1(vue@3.5.20(typescript@5.9.2)) - '@vue-macros/config': 0.6.1(vue@3.5.20(typescript@5.9.2)) - '@vue-macros/define-emit': 0.5.4(vue@3.5.20(typescript@5.9.2)) - '@vue-macros/define-models': 1.3.5(@vueuse/core@13.8.0(vue@3.5.20(typescript@5.9.2)))(vue@3.5.20(typescript@5.9.2)) - '@vue-macros/define-prop': 0.6.5(vue@3.5.20(typescript@5.9.2)) - '@vue-macros/define-props': 4.0.6(@vue-macros/reactivity-transform@1.1.6(vue@3.5.20(typescript@5.9.2)))(vue@3.5.20(typescript@5.9.2)) - '@vue-macros/define-props-refs': 1.3.5(vue@3.5.20(typescript@5.9.2)) - '@vue-macros/define-render': 1.6.6(vue@3.5.20(typescript@5.9.2)) - '@vue-macros/define-slots': 1.2.6(vue@3.5.20(typescript@5.9.2)) - '@vue-macros/define-stylex': 0.2.3(vue@3.5.20(typescript@5.9.2)) - '@vue-macros/devtools': 0.4.1(rolldown-vite@7.1.5(@types/node@24.3.0)(esbuild@0.25.9)(jiti@2.5.1)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(typescript@5.9.2) - '@vue-macros/export-expose': 0.3.5(vue@3.5.20(typescript@5.9.2)) - '@vue-macros/export-props': 0.6.5(vue@3.5.20(typescript@5.9.2)) - '@vue-macros/export-render': 0.3.5(vue@3.5.20(typescript@5.9.2)) - '@vue-macros/hoist-static': 1.7.0(vue@3.5.20(typescript@5.9.2)) - '@vue-macros/jsx-directive': 0.10.6(typescript@5.9.2) - '@vue-macros/named-template': 0.5.5(vue@3.5.20(typescript@5.9.2)) - '@vue-macros/reactivity-transform': 1.1.6(vue@3.5.20(typescript@5.9.2)) - '@vue-macros/script-lang': 0.2.5(vue@3.5.20(typescript@5.9.2)) - '@vue-macros/setup-block': 0.4.5(vue@3.5.20(typescript@5.9.2)) - '@vue-macros/setup-component': 0.18.5(vue@3.5.20(typescript@5.9.2)) - '@vue-macros/setup-sfc': 0.18.5(vue@3.5.20(typescript@5.9.2)) - '@vue-macros/short-bind': 1.1.5(vue@3.5.20(typescript@5.9.2)) - '@vue-macros/short-emits': 1.6.5(vue@3.5.20(typescript@5.9.2)) - '@vue-macros/short-vmodel': 1.5.5(vue@3.5.20(typescript@5.9.2)) - '@vue-macros/volar': 0.30.15(typescript@5.9.2)(vue-tsc@3.0.6(typescript@5.9.2))(vue@3.5.20(typescript@5.9.2)) - unplugin: 1.16.1 - unplugin-combine: 1.2.1(esbuild@0.25.9)(rolldown-vite@7.1.5(@types/node@24.3.0)(esbuild@0.25.9)(jiti@2.5.1)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(rolldown@1.0.0-beta.34)(rollup@2.79.2)(unplugin@1.16.1) - unplugin-vue-define-options: 1.5.5(vue@3.5.20(typescript@5.9.2)) - vue: 3.5.20(typescript@5.9.2) - transitivePeerDependencies: - - '@rspack/core' - - '@vueuse/core' - - esbuild - - rolldown - - rollup - - typescript - - vite - - vue-tsc - - webpack - unplugin-vue-macros@2.14.5(@vueuse/core@13.8.0(vue@3.5.20(typescript@5.9.2)))(esbuild@0.25.9)(rolldown-vite@7.1.5(@types/node@24.3.0)(esbuild@0.25.9)(jiti@2.5.1)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(rolldown@1.0.0-beta.34)(rollup@4.49.0)(typescript@5.9.2)(vue-tsc@3.0.6(typescript@5.9.2))(vue@3.5.20(typescript@5.9.2)): dependencies: '@vue-macros/better-define': 1.11.4(vue@3.5.20(typescript@5.9.2)) @@ -30339,20 +29917,6 @@ snapshots: - tsx - yaml - unplugin-yaml@3.0.4(@nuxt/kit@4.0.3(magicast@0.3.5))(@nuxt/schema@4.0.3)(astro@5.10.1(@netlify/blobs@9.1.2)(@types/node@24.3.0)(db0@0.3.2(drizzle-orm@0.44.5(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7)))(encoding@0.1.13)(ioredis@5.7.0)(jiti@2.5.1)(less@4.4.1)(lightningcss@1.30.1)(rollup@2.79.2)(terser@5.43.1)(tsx@4.20.5)(typescript@5.9.2)(yaml@2.8.1))(esbuild@0.25.9)(rolldown-vite@7.1.5(@types/node@24.3.0)(esbuild@0.25.9)(jiti@2.5.1)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(rolldown@1.0.0-beta.34)(rollup@2.79.2): - dependencies: - '@rollup/pluginutils': 5.2.0(rollup@2.79.2) - unplugin: 2.3.9 - yaml: 2.8.1 - optionalDependencies: - '@nuxt/kit': 4.0.3(magicast@0.3.5) - '@nuxt/schema': 4.0.3 - astro: 5.10.1(@netlify/blobs@9.1.2)(@types/node@24.3.0)(db0@0.3.2(drizzle-orm@0.44.5(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7)))(encoding@0.1.13)(ioredis@5.7.0)(jiti@2.5.1)(less@4.4.1)(lightningcss@1.30.1)(rollup@2.79.2)(terser@5.43.1)(tsx@4.20.5)(typescript@5.9.2)(yaml@2.8.1) - esbuild: 0.25.9 - rolldown: 1.0.0-beta.34 - rollup: 2.79.2 - vite: rolldown-vite@7.1.5(@types/node@24.3.0)(esbuild@0.25.9)(jiti@2.5.1)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) - unplugin-yaml@3.0.4(@nuxt/kit@4.0.3(magicast@0.3.5))(@nuxt/schema@4.0.3)(astro@5.10.1(@netlify/blobs@9.1.2)(@types/node@24.3.0)(db0@0.3.2(drizzle-orm@0.44.5(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7)))(encoding@0.1.13)(ioredis@5.7.0)(jiti@2.5.1)(less@4.4.1)(lightningcss@1.30.1)(rollup@4.49.0)(terser@5.43.1)(tsx@4.20.5)(typescript@5.9.2)(yaml@2.8.1))(esbuild@0.25.9)(rolldown-vite@7.1.5(@types/node@24.3.0)(esbuild@0.25.9)(jiti@2.5.1)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(rolldown@1.0.0-beta.34)(rollup@4.49.0): dependencies: '@rollup/pluginutils': 5.2.0(rollup@4.49.0) @@ -30381,20 +29945,6 @@ snapshots: rollup: 4.49.0 vite: 6.3.5(@types/node@24.3.0)(jiti@2.5.1)(less@4.4.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) - unplugin-yaml@3.0.4(@nuxt/kit@4.0.3(magicast@0.3.5))(@nuxt/schema@4.0.3)(astro@5.10.1(@netlify/blobs@9.1.2)(@types/node@24.3.0)(db0@0.3.2(drizzle-orm@0.44.5(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7)))(encoding@0.1.13)(ioredis@5.7.0)(jiti@2.5.1)(less@4.4.1)(lightningcss@1.30.1)(rollup@4.49.0)(terser@5.43.1)(tsx@4.20.5)(typescript@5.9.2)(yaml@2.8.1))(esbuild@0.25.9)(rolldown@1.0.0-beta.34)(rollup@4.49.0)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.4.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)): - dependencies: - '@rollup/pluginutils': 5.2.0(rollup@4.49.0) - unplugin: 2.3.9 - yaml: 2.8.1 - optionalDependencies: - '@nuxt/kit': 4.0.3(magicast@0.3.5) - '@nuxt/schema': 4.0.3 - astro: 5.10.1(@netlify/blobs@9.1.2)(@types/node@24.3.0)(db0@0.3.2(drizzle-orm@0.44.5(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7)))(encoding@0.1.13)(ioredis@5.7.0)(jiti@2.5.1)(less@4.4.1)(lightningcss@1.30.1)(rollup@4.49.0)(terser@5.43.1)(tsx@4.20.5)(typescript@5.9.2)(yaml@2.8.1) - esbuild: 0.25.9 - rolldown: 1.0.0-beta.34 - rollup: 4.49.0 - vite: 7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.4.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) - unplugin-yaml@3.0.4(@nuxt/kit@4.0.3(magicast@0.3.5))(@nuxt/schema@4.0.3)(astro@5.10.1(@netlify/blobs@9.1.2)(@types/node@24.3.0)(db0@0.3.2(drizzle-orm@0.44.5(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7)))(ioredis@5.7.0)(jiti@2.5.1)(less@4.4.1)(lightningcss@1.30.1)(rollup@4.49.0)(terser@5.43.1)(tsx@4.20.5)(typescript@5.9.2)(yaml@2.8.1))(esbuild@0.25.9)(rolldown@1.0.0-beta.34)(rollup@4.49.0)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.4.1)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)): dependencies: '@rollup/pluginutils': 5.2.0(rollup@4.49.0) @@ -30403,7 +29953,7 @@ snapshots: optionalDependencies: '@nuxt/kit': 4.0.3(magicast@0.3.5) '@nuxt/schema': 4.0.3 - astro: 5.10.1(@netlify/blobs@9.1.2)(@types/node@24.3.0)(db0@0.3.2(drizzle-orm@0.44.5(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7)))(ioredis@5.7.0)(jiti@2.5.1)(less@4.4.1)(lightningcss@1.30.1)(rollup@4.49.0)(terser@5.43.1)(tsx@4.20.5)(typescript@5.9.2)(yaml@2.8.1) + astro: 5.10.1(@netlify/blobs@9.1.2)(@types/node@24.3.0)(db0@0.3.2(drizzle-orm@0.44.5(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7)))(encoding@0.1.13)(ioredis@5.7.0)(jiti@2.5.1)(less@4.4.1)(lightningcss@1.30.1)(rollup@4.49.0)(terser@5.43.1)(tsx@4.20.5)(typescript@5.9.2)(yaml@2.8.1) esbuild: 0.25.9 rolldown: 1.0.0-beta.34 rollup: 4.49.0 @@ -30576,16 +30126,6 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-bundle-visualizer@1.2.1(rollup@2.79.2): - dependencies: - cac: 6.7.14 - import-from-esm: 1.3.3 - rollup-plugin-visualizer: 5.11.0(rollup@2.79.2) - tmp: 0.2.3 - transitivePeerDependencies: - - rollup - - supports-color - vite-bundle-visualizer@1.2.1(rollup@4.49.0): dependencies: cac: 6.7.14 @@ -30778,21 +30318,6 @@ snapshots: - supports-color - vue - vite-plugin-vue-devtools@8.0.1(rolldown-vite@7.1.5(@types/node@24.3.0)(esbuild@0.25.9)(jiti@2.5.1)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(vue@3.5.20(typescript@5.9.2)): - dependencies: - '@vue/devtools-core': 8.0.1(rolldown-vite@7.1.5(@types/node@24.3.0)(esbuild@0.25.9)(jiti@2.5.1)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(vue@3.5.20(typescript@5.9.2)) - '@vue/devtools-kit': 8.0.1 - '@vue/devtools-shared': 8.0.1 - execa: 9.6.0 - sirv: 3.0.1 - vite: rolldown-vite@7.1.5(@types/node@24.3.0)(esbuild@0.25.9)(jiti@2.5.1)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1) - vite-plugin-inspect: 11.3.3(@nuxt/kit@4.0.3(magicast@0.3.5))(rolldown-vite@7.1.5(@types/node@24.3.0)(esbuild@0.25.9)(jiti@2.5.1)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) - vite-plugin-vue-inspector: 5.3.2(rolldown-vite@7.1.5(@types/node@24.3.0)(esbuild@0.25.9)(jiti@2.5.1)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)) - transitivePeerDependencies: - - '@nuxt/kit' - - supports-color - - vue - vite-plugin-vue-inspector@5.3.2(rolldown-vite@7.1.5(@types/node@24.3.0)(esbuild@0.25.9)(jiti@2.5.1)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)): dependencies: '@babel/core': 7.28.3 @@ -31033,11 +30558,11 @@ snapshots: '@vue/devtools-api': 6.6.4 vue: 3.5.20(typescript@5.9.2) - vue-sonner@2.0.8(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.0)(@types/node@24.3.0)(@vue/compiler-sfc@3.5.20)(bufferutil@4.0.9)(db0@0.3.2(drizzle-orm@0.44.5(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7)))(drizzle-orm@0.44.5(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7))(encoding@0.1.13)(eslint@9.34.0(jiti@2.5.1))(ioredis@5.7.0)(less@4.4.1)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rolldown-vite@7.1.5(@types/node@24.3.0)(esbuild@0.25.9)(jiti@2.5.1)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(rolldown@1.0.0-beta.34)(rollup@2.79.2)(terser@5.43.1)(tsx@4.20.5)(typescript@5.9.2)(utf-8-validate@5.0.10)(vue-tsc@3.0.6(typescript@5.9.2))(xml2js@0.6.2)(yaml@2.8.1): + vue-sonner@2.0.8(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.0)(@types/node@24.3.0)(@vue/compiler-sfc@3.5.20)(bufferutil@4.0.9)(db0@0.3.2(drizzle-orm@0.44.5(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7)))(drizzle-orm@0.44.5(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7))(encoding@0.1.13)(eslint@9.34.0(jiti@2.5.1))(ioredis@5.7.0)(less@4.4.1)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rolldown-vite@7.1.5(@types/node@24.3.0)(esbuild@0.25.9)(jiti@2.5.1)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(rolldown@1.0.0-beta.34)(rollup@4.49.0)(terser@5.43.1)(tsx@4.20.5)(typescript@5.9.2)(utf-8-validate@5.0.10)(vue-tsc@3.0.6(typescript@5.9.2))(xml2js@0.6.2)(yaml@2.8.1): dependencies: '@nuxt/kit': 4.0.3(magicast@0.3.5) '@nuxt/schema': 4.0.3 - nuxt: 4.0.3(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.0)(@types/node@24.3.0)(@vue/compiler-sfc@3.5.20)(bufferutil@4.0.9)(db0@0.3.2(drizzle-orm@0.44.5(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7)))(drizzle-orm@0.44.5(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7))(encoding@0.1.13)(eslint@9.34.0(jiti@2.5.1))(ioredis@5.7.0)(less@4.4.1)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rolldown-vite@7.1.5(@types/node@24.3.0)(esbuild@0.25.9)(jiti@2.5.1)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(rolldown@1.0.0-beta.34)(rollup@2.79.2)(terser@5.43.1)(tsx@4.20.5)(typescript@5.9.2)(utf-8-validate@5.0.10)(vue-tsc@3.0.6(typescript@5.9.2))(xml2js@0.6.2)(yaml@2.8.1) + nuxt: 4.0.3(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.0)(@types/node@24.3.0)(@vue/compiler-sfc@3.5.20)(bufferutil@4.0.9)(db0@0.3.2(drizzle-orm@0.44.5(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7)))(drizzle-orm@0.44.5(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(gel@2.0.0)(pg@8.16.3)(postgres@3.4.7))(encoding@0.1.13)(eslint@9.34.0(jiti@2.5.1))(ioredis@5.7.0)(less@4.4.1)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rolldown-vite@7.1.5(@types/node@24.3.0)(esbuild@0.25.9)(jiti@2.5.1)(less@4.4.1)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(rolldown@1.0.0-beta.34)(rollup@4.49.0)(terser@5.43.1)(tsx@4.20.5)(typescript@5.9.2)(utf-8-validate@5.0.10)(vue-tsc@3.0.6(typescript@5.9.2))(xml2js@0.6.2)(yaml@2.8.1) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos'