fix: build & typecheck

This commit is contained in:
Neko Ayaka
2025-08-02 01:26:57 +08:00
parent d7c681f48e
commit 856625f638
12 changed files with 104 additions and 339 deletions
@@ -18,7 +18,6 @@
},
"devDependencies": {
"@iconify/vue": "^5.0.0",
"@types/node": "^24.1.0",
"@unocss/reset": "^66.3.3",
"@vitejs/plugin-vue": "^6.0.1",
"typescript": "~5.9.2",
@@ -6,7 +6,7 @@ import { onMounted, ref } from 'vue'
const containerRef = ref<HTMLDivElement>()
// https://developer.mozilla.org/en-US/docs/Web/API/AnalyserNode
const analyser = ref<AnalyserNode>()
const analyserDataBuffer = ref<Uint8Array>()
const analyserDataBuffer = ref<Uint8Array<ArrayBuffer>>()
const { audioContext } = useAudioContext()
const canvasElemRef = ref<HTMLCanvasElement>()
const isDark = useDark()
-4
View File
@@ -27,10 +27,6 @@
"types": "./dist/audio-context/processor.worklet.d.mts",
"default": "./dist/audio-context/processor.worklet.mjs"
},
"./vue": {
"types": "./dist/vue/index.d.mts",
"default": "./dist/vue/index.mjs"
},
"./encoding": {
"types": "./dist/encoding/index.d.mts",
"default": "./dist/encoding/index.mjs"
-94
View File
@@ -1,94 +0,0 @@
import type { MaybeRefOrGetter } from 'vue'
import { computed, onUnmounted, ref, toRef, watch } from 'vue'
import { createAudioGainNode, createAudioSource, getAudioContext, getCurrentTime, initializeAudioContext, removeAudioGainNode, removeAudioSource } from '../audio-context'
export function useAudioPlayback(src: MaybeRefOrGetter<MediaStream | undefined>) {
const audioContext = getAudioContext()
const sourceStream = toRef(src)
const isEnabled = ref(false)
const volume = ref(50) // 0-100
const error = ref('')
// Audio nodes for playback
const source = ref<MediaStreamAudioSourceNode>()
const gainNode = ref<GainNode>()
const actualVolume = computed(() => volume.value / 100)
async function setupPlayback() {
if (!sourceStream.value || !isEnabled.value)
return
try {
error.value = ''
// Ensure audio context is ready
await initializeAudioContext()
// Clean up existing playback
cleanupPlayback()
// Create new nodes
source.value = createAudioSource(sourceStream.value)
gainNode.value = createAudioGainNode(actualVolume.value)
// Connect: source -> gain -> destination
source.value.connect(gainNode.value)
gainNode.value.connect(audioContext!.destination)
}
catch (err) {
error.value = err instanceof Error ? err.message : String(err)
console.error('Failed to setup audio playback:', err)
}
}
function cleanupPlayback() {
if (source.value) {
removeAudioSource(source.value)
source.value = undefined
}
if (gainNode.value) {
removeAudioGainNode(gainNode.value)
gainNode.value = undefined
}
}
// Watch for changes
watch([sourceStream, isEnabled], async () => {
if (isEnabled.value && sourceStream.value) {
await setupPlayback()
}
else {
cleanupPlayback()
}
})
watch(actualVolume, (newVolume) => {
if (gainNode.value) {
// Smooth volume changes to prevent clicks
const currentTime = getCurrentTime()
gainNode.value.gain.cancelScheduledValues(currentTime)
gainNode.value.gain.setValueAtTime(gainNode.value.gain.value, currentTime)
gainNode.value.gain.linearRampToValueAtTime(newVolume, currentTime + 0.1)
}
})
onUnmounted(() => {
cleanupPlayback()
})
return {
// State
isEnabled,
volume,
error,
// Manual control
setupPlayback,
cleanupPlayback,
}
}
-203
View File
@@ -1,203 +0,0 @@
import type { MaybeRefOrGetter } from 'vue'
import { onUnmounted, ref, toRef } from 'vue'
import { createAudioAnalyser, createAudioSource, getAudioContext, getCurrentTime, initializeAudioContext } from '../audio-context'
export interface AudioStreamConfig {
deviceId: string
sampleRate?: number
echoCancellation?: boolean
noiseSuppression?: boolean
autoGainControl?: boolean
}
export interface AudioAnalysisData {
volumeLevel: number
frequencyData: Uint8Array
timeDomainData: Float32Array
timestamp: number
}
export type AudioAnalysisCallback = (data: AudioAnalysisData) => void
export type AudioChunkCallback = (chunk: Float32Array, sampleRate: number) => void
export function useAudioStream(cfg: MaybeRefOrGetter<AudioStreamConfig | undefined>) {
const config = toRef(cfg)
const isActive = ref(false)
const error = ref<string>('')
const isInitializing = ref(false) // Add loading state
// Stream-specific state
const mediaStream = ref<MediaStream>()
const source = ref<MediaStreamAudioSourceNode>()
const analyser = ref<AnalyserNode>()
// Callbacks for different types of analysis
const analysisCallbacks = new Set<AudioAnalysisCallback>()
const chunkCallbacks = new Set<AudioChunkCallback>()
// Audio data arrays
const dataArray = ref<Uint8Array>()
const timeDataArray = ref<Float32Array>()
// Helper function to wait for audio context
async function waitForAudioContext(maxRetries = 10, delay = 100) {
for (let i = 0; i < maxRetries; i++) {
const audioContext = getAudioContext()
if (audioContext && audioContext.state !== 'closed') {
return audioContext
}
await new Promise(resolve => setTimeout(resolve, delay))
}
throw new Error('Audio context failed to initialize within timeout')
}
async function start() {
if (isActive.value || isInitializing.value)
return
try {
isInitializing.value = true
error.value = ''
// Initialize global audio context and wait for it
await initializeAudioContext(config.value?.sampleRate || 16000)
await waitForAudioContext()
// Get user media
mediaStream.value = await navigator.mediaDevices.getUserMedia({
audio: {
deviceId: config.value?.deviceId,
sampleRate: config.value?.sampleRate || 16000,
echoCancellation: config.value?.echoCancellation ?? true,
noiseSuppression: config.value?.noiseSuppression ?? true,
autoGainControl: config.value?.autoGainControl ?? true,
},
})
// Ensure we still have a valid audio context after getUserMedia
const currentAudioContext = getAudioContext()
if (!currentAudioContext) {
throw new Error('Audio context became unavailable')
}
// Create audio nodes using global context
source.value = createAudioSource(mediaStream.value)
analyser.value = createAudioAnalyser({
fftSize: 512,
smoothingTimeConstant: 0.1,
})
// Connect nodes
source.value.connect(analyser.value)
// Setup data arrays
const bufferLength = analyser.value.frequencyBinCount
dataArray.value = new Uint8Array(bufferLength)
timeDataArray.value = new Float32Array(analyser.value.fftSize)
isActive.value = true
startAnalysis()
}
catch (err) {
error.value = err instanceof Error ? err.message : String(err)
console.error('Failed to start audio stream:', err)
}
finally {
isInitializing.value = false
}
}
function startAnalysis() {
const analyze = () => {
const audioContext = getAudioContext()
if (!audioContext || !analyser.value || !dataArray.value || !timeDataArray.value)
return
// Get frequency and time domain data
analyser.value.getByteFrequencyData(dataArray.value)
analyser.value.getFloatTimeDomainData(timeDataArray.value)
// Calculate 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)
const volumeLevel = Math.min(100, (rms / 255) * 100 * 3)
// Create analysis data
const analysisData: AudioAnalysisData = {
volumeLevel,
frequencyData: new Uint8Array(dataArray.value),
timeDomainData: new Float32Array(timeDataArray.value),
timestamp: getCurrentTime(),
}
// Notify analysis callbacks
analysisCallbacks.forEach((callback) => {
try {
callback(analysisData)
}
catch (err) {
console.error('Audio analysis callback error:', err)
}
})
// Notify chunk callbacks with fresh audioContext reference
chunkCallbacks.forEach((callback) => {
try {
callback(
new Float32Array(timeDataArray.value),
audioContext.sampleRate,
)
}
catch (err) {
console.error('Audio chunk callback error:', err)
}
})
// Only continue if still active
if (isActive.value) {
requestAnimationFrame(analyze)
}
}
analyze()
}
// Callback management
function addAnalysisCallback(callback: AudioAnalysisCallback) {
analysisCallbacks.add(callback)
return () => analysisCallbacks.delete(callback)
}
function addChunkCallback(callback: AudioChunkCallback) {
chunkCallbacks.add(callback)
return () => chunkCallbacks.delete(callback)
}
function stop() {
mediaStream.value?.getTracks().forEach(track => track.stop())
}
// Cleanup
onUnmounted(() => {
stop()
})
return {
isActive,
error,
mediaStream,
isInitializing,
start,
stop,
addAnalysisCallback,
addChunkCallback,
}
}
-2
View File
@@ -1,2 +0,0 @@
export * from './audio-playback'
export * from './audio-stream'
-1
View File
@@ -6,7 +6,6 @@ export default defineConfig({
'audio-context/index': 'src/audio-context/index.ts',
'audio-context/processor.worklet': 'src/audio-context/processor.worklet.ts',
'encoding/index': 'src/encoding/index.ts',
'vue/index': 'src/vue/index.ts',
},
unbundle: true,
fixedExtension: true,
+1 -1
View File
@@ -147,7 +147,7 @@
"unocss": "^66.3.3",
"unplugin-info": "^1.2.4",
"unplugin-yaml": "^3.0.2",
"vite": "^7.0.6",
"vite": "^6.3.5",
"vue": "^3.5.18"
}
}
@@ -29,7 +29,7 @@ const errorMessage = ref<string>('')
const audioContext = ref<AudioContext>()
const analyser = ref<AnalyserNode>()
const dataArray = ref<Uint8Array>()
const dataArray = ref<Uint8Array<ArrayBuffer>>()
const animationFrame = ref<number>()
const volumeLevel = ref(0) // 0-100
@@ -2,7 +2,7 @@ import { ref } from 'vue'
export function useAudioAnalyzer() {
const analyzer = ref<AnalyserNode>()
const dataArray = ref<Uint8Array>()
const dataArray = ref<Uint8Array<ArrayBuffer>>()
const animationFrame = ref<number>()
const onAnalyzerUpdateHooks = ref<Array<(volumeLevel: number) => void | Promise<void>>>([])
+1 -1
View File
@@ -1,7 +1,7 @@
export interface AudioManagerType {
audioContext: AudioContext
analyser: AnalyserNode
dataBuffer: Float32Array
dataBuffer: Float32Array<ArrayBuffer>
frameId: number | null
onVolumeChange?: (volume: number) => void
}
+99 -29
View File
@@ -255,9 +255,6 @@ importers:
'@iconify/vue':
specifier: ^5.0.0
version: 5.0.0(vue@3.5.18(typescript@5.9.2))
'@types/node':
specifier: ^24.1.0
version: 24.1.0
'@unocss/reset':
specifier: ^66.3.3
version: 66.3.3
@@ -1482,7 +1479,7 @@ importers:
version: 5.2.6
'@histoire/plugin-vue':
specifier: 1.0.0-alpha.2
version: 1.0.0-alpha.2(histoire@1.0.0-alpha.2(@types/node@24.1.0)(bufferutil@4.0.9)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(utf-8-validate@5.0.10)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)))(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.5.18(typescript@5.9.2))
version: 1.0.0-alpha.2(histoire@1.0.0-alpha.2(@types/node@24.1.0)(bufferutil@4.0.9)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(utf-8-validate@5.0.10)(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)))(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.5.18(typescript@5.9.2))
'@iconify-json/carbon':
specifier: ^1.2.11
version: 1.2.11
@@ -1524,7 +1521,7 @@ importers:
version: 66.3.3
'@vitejs/plugin-vue':
specifier: ^6.0.1
version: 6.0.1(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.5.18(typescript@5.9.2))
version: 6.0.1(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.5.18(typescript@5.9.2))
clustr:
specifier: ^1.0.2
version: 1.0.2
@@ -1533,19 +1530,19 @@ importers:
version: 3.1.3
histoire:
specifier: 1.0.0-alpha.2
version: 1.0.0-alpha.2(@types/node@24.1.0)(bufferutil@4.0.9)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(utf-8-validate@5.0.10)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))
version: 1.0.0-alpha.2(@types/node@24.1.0)(bufferutil@4.0.9)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(utf-8-validate@5.0.10)(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))
unocss:
specifier: ^66.3.3
version: 66.3.3(postcss@8.5.6)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.5.18(typescript@5.9.2))
version: 66.3.3(postcss@8.5.6)(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.5.18(typescript@5.9.2))
unplugin-info:
specifier: ^1.2.4
version: 1.2.4(@nuxt/kit@3.14.1592(magicast@0.3.5)(rollup@4.46.2))(@nuxt/schema@3.14.1592(magicast@0.3.5)(rollup@4.46.2))(esbuild@0.25.8)(rollup@4.46.2)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))
version: 1.2.4(@nuxt/kit@3.14.1592(magicast@0.3.5)(rollup@4.46.2))(@nuxt/schema@3.14.1592(magicast@0.3.5)(rollup@4.46.2))(esbuild@0.25.8)(rollup@4.46.2)(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))
unplugin-yaml:
specifier: ^3.0.2
version: 3.0.2(@nuxt/kit@3.14.1592(magicast@0.3.5)(rollup@4.46.2))(@nuxt/schema@3.14.1592(magicast@0.3.5)(rollup@4.46.2))(astro@5.10.1(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(rollup@4.46.2)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.0))(esbuild@0.25.8)(rolldown@1.0.0-beta.30)(rollup@4.46.2)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))
version: 3.0.2(@nuxt/kit@3.14.1592(magicast@0.3.5)(rollup@4.46.2))(@nuxt/schema@3.14.1592(magicast@0.3.5)(rollup@4.46.2))(astro@5.10.1(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(rollup@4.46.2)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.0))(esbuild@0.25.8)(rolldown@1.0.0-beta.30)(rollup@4.46.2)(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))
vite:
specifier: ^7.0.6
version: 7.0.6(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)
specifier: ^6.3.5
version: 6.3.5(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)
vue:
specifier: ^3.5.18
version: 3.5.18(typescript@5.9.2)
@@ -14626,17 +14623,17 @@ snapshots:
'@guiiai/logg@1.0.10': {}
'@histoire/app@1.0.0-alpha.2(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))':
'@histoire/app@1.0.0-alpha.2(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))':
dependencies:
'@histoire/controls': 1.0.0-alpha.2(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))
'@histoire/shared': 1.0.0-alpha.2(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))
'@histoire/controls': 1.0.0-alpha.2(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))
'@histoire/shared': 1.0.0-alpha.2(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))
'@histoire/vendors': 1.0.0-alpha.2
fuse.js: 7.1.0
shiki: 3.9.1
transitivePeerDependencies:
- vite
'@histoire/controls@1.0.0-alpha.2(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))':
'@histoire/controls@1.0.0-alpha.2(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))':
dependencies:
'@codemirror/commands': 6.8.0
'@codemirror/lang-json': 6.0.1
@@ -14645,26 +14642,26 @@ snapshots:
'@codemirror/state': 6.5.2
'@codemirror/theme-one-dark': 6.1.2
'@codemirror/view': 6.36.4
'@histoire/shared': 1.0.0-alpha.2(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))
'@histoire/shared': 1.0.0-alpha.2(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))
'@histoire/vendors': 1.0.0-alpha.2
transitivePeerDependencies:
- vite
'@histoire/plugin-vue@1.0.0-alpha.2(histoire@1.0.0-alpha.2(@types/node@24.1.0)(bufferutil@4.0.9)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(utf-8-validate@5.0.10)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)))(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.5.18(typescript@5.9.2))':
'@histoire/plugin-vue@1.0.0-alpha.2(histoire@1.0.0-alpha.2(@types/node@24.1.0)(bufferutil@4.0.9)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(utf-8-validate@5.0.10)(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)))(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.5.18(typescript@5.9.2))':
dependencies:
'@histoire/controls': 1.0.0-alpha.2(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))
'@histoire/shared': 1.0.0-alpha.2(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))
'@histoire/controls': 1.0.0-alpha.2(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))
'@histoire/shared': 1.0.0-alpha.2(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))
'@histoire/vendors': 1.0.0-alpha.2
change-case: 5.4.4
globby: 14.0.2
histoire: 1.0.0-alpha.2(@types/node@24.1.0)(bufferutil@4.0.9)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(utf-8-validate@5.0.10)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))
histoire: 1.0.0-alpha.2(@types/node@24.1.0)(bufferutil@4.0.9)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(utf-8-validate@5.0.10)(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))
launch-editor: 2.10.0
pathe: 1.1.2
vue: 3.5.18(typescript@5.9.2)
transitivePeerDependencies:
- vite
'@histoire/shared@1.0.0-alpha.2(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))':
'@histoire/shared@1.0.0-alpha.2(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))':
dependencies:
'@histoire/vendors': 1.0.0-alpha.2
'@types/fs-extra': 11.0.4
@@ -14672,7 +14669,7 @@ snapshots:
chokidar: 4.0.3
pathe: 1.1.2
picocolors: 1.1.1
vite: 7.0.6(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)
vite: 6.3.5(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)
'@histoire/vendors@1.0.0-alpha.2': {}
@@ -16711,6 +16708,16 @@ snapshots:
transitivePeerDependencies:
- vue
'@unocss/astro@66.3.3(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.5.18(typescript@5.9.2))':
dependencies:
'@unocss/core': 66.3.3
'@unocss/reset': 66.3.3
'@unocss/vite': 66.3.3(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.5.18(typescript@5.9.2))
optionalDependencies:
vite: 6.3.5(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)
transitivePeerDependencies:
- vue
'@unocss/astro@66.3.3(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.5.18(typescript@5.9.2))':
dependencies:
'@unocss/core': 66.3.3
@@ -16901,6 +16908,21 @@ snapshots:
transitivePeerDependencies:
- vue
'@unocss/vite@66.3.3(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.5.18(typescript@5.9.2))':
dependencies:
'@ampproject/remapping': 2.3.0
'@unocss/config': 66.3.3
'@unocss/core': 66.3.3
'@unocss/inspector': 66.3.3(vue@3.5.18(typescript@5.9.2))
chokidar: 3.6.0
magic-string: 0.30.17
pathe: 2.0.3
tinyglobby: 0.2.14
unplugin-utils: 0.2.4
vite: 6.3.5(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)
transitivePeerDependencies:
- vue
'@unocss/vite@66.3.3(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.5.18(typescript@5.9.2))':
dependencies:
'@ampproject/remapping': 2.3.0
@@ -17030,6 +17052,12 @@ snapshots:
vite: rolldown-vite@7.0.12(@types/node@24.1.0)(esbuild@0.25.8)(jiti@2.5.1)(less@4.4.0)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)
vue: 3.5.18(typescript@5.9.2)
'@vitejs/plugin-vue@6.0.1(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.5.18(typescript@5.9.2))':
dependencies:
'@rolldown/pluginutils': 1.0.0-beta.29
vite: 6.3.5(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)
vue: 3.5.18(typescript@5.9.2)
'@vitejs/plugin-vue@6.0.1(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.5.18(typescript@5.9.2))':
dependencies:
'@rolldown/pluginutils': 1.0.0-beta.29
@@ -20777,12 +20805,12 @@ snapshots:
highlight.js@10.7.3: {}
histoire@1.0.0-alpha.2(@types/node@24.1.0)(bufferutil@4.0.9)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(utf-8-validate@5.0.10)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)):
histoire@1.0.0-alpha.2(@types/node@24.1.0)(bufferutil@4.0.9)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(utf-8-validate@5.0.10)(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)):
dependencies:
'@akryum/tinypool': 0.3.1
'@histoire/app': 1.0.0-alpha.2(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))
'@histoire/controls': 1.0.0-alpha.2(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))
'@histoire/shared': 1.0.0-alpha.2(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))
'@histoire/app': 1.0.0-alpha.2(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))
'@histoire/controls': 1.0.0-alpha.2(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))
'@histoire/shared': 1.0.0-alpha.2(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))
'@histoire/vendors': 1.0.0-alpha.2
'@types/markdown-it': 14.1.2
birpc: 0.2.19
@@ -20807,7 +20835,7 @@ snapshots:
sade: 1.8.1
shiki: 3.9.1
sirv: 3.0.1
vite: 7.0.6(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)
vite: 6.3.5(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)
vite-node: 0.34.7(@types/node@24.1.0)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)
transitivePeerDependencies:
- '@types/node'
@@ -24935,6 +24963,34 @@ snapshots:
- supports-color
- vue
unocss@66.3.3(postcss@8.5.6)(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.5.18(typescript@5.9.2)):
dependencies:
'@unocss/astro': 66.3.3(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.5.18(typescript@5.9.2))
'@unocss/cli': 66.3.3
'@unocss/core': 66.3.3
'@unocss/postcss': 66.3.3(postcss@8.5.6)
'@unocss/preset-attributify': 66.3.3
'@unocss/preset-icons': 66.3.3
'@unocss/preset-mini': 66.3.3
'@unocss/preset-tagify': 66.3.3
'@unocss/preset-typography': 66.3.3
'@unocss/preset-uno': 66.3.3
'@unocss/preset-web-fonts': 66.3.3
'@unocss/preset-wind': 66.3.3
'@unocss/preset-wind3': 66.3.3
'@unocss/preset-wind4': 66.3.3
'@unocss/transformer-attributify-jsx': 66.3.3
'@unocss/transformer-compile-class': 66.3.3
'@unocss/transformer-directives': 66.3.3
'@unocss/transformer-variant-group': 66.3.3
'@unocss/vite': 66.3.3(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.5.18(typescript@5.9.2))
optionalDependencies:
vite: 6.3.5(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)
transitivePeerDependencies:
- postcss
- supports-color
- vue
unocss@66.3.3(postcss@8.5.6)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.5.18(typescript@5.9.2)):
dependencies:
'@unocss/astro': 66.3.3(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.5.18(typescript@5.9.2))
@@ -25011,7 +25067,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
unplugin-info@1.2.4(@nuxt/kit@3.14.1592(magicast@0.3.5)(rollup@4.46.2))(@nuxt/schema@3.14.1592(magicast@0.3.5)(rollup@4.46.2))(esbuild@0.25.8)(rollup@4.46.2)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)):
unplugin-info@1.2.4(@nuxt/kit@3.14.1592(magicast@0.3.5)(rollup@4.46.2))(@nuxt/schema@3.14.1592(magicast@0.3.5)(rollup@4.46.2))(esbuild@0.25.8)(rollup@4.46.2)(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)):
dependencies:
ci-info: 4.3.0
git-url-parse: 16.1.0
@@ -25022,7 +25078,7 @@ snapshots:
'@nuxt/schema': 3.14.1592(magicast@0.3.5)(rollup@4.46.2)
esbuild: 0.25.8
rollup: 4.46.2
vite: 7.0.6(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)
vite: 6.3.5(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)
transitivePeerDependencies:
- supports-color
@@ -25221,6 +25277,20 @@ snapshots:
rollup: 4.46.2
vite: rolldown-vite@7.0.12(@types/node@24.1.0)(esbuild@0.25.8)(jiti@2.5.1)(less@4.4.0)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)
unplugin-yaml@3.0.2(@nuxt/kit@3.14.1592(magicast@0.3.5)(rollup@4.46.2))(@nuxt/schema@3.14.1592(magicast@0.3.5)(rollup@4.46.2))(astro@5.10.1(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(rollup@4.46.2)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.0))(esbuild@0.25.8)(rolldown@1.0.0-beta.30)(rollup@4.46.2)(vite@6.3.5(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)):
dependencies:
'@rollup/pluginutils': 5.2.0(rollup@4.46.2)
unplugin: 2.3.5
yaml: 2.8.0
optionalDependencies:
'@nuxt/kit': 3.14.1592(magicast@0.3.5)(rollup@4.46.2)
'@nuxt/schema': 3.14.1592(magicast@0.3.5)(rollup@4.46.2)
astro: 5.10.1(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(rollup@4.46.2)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.0)
esbuild: 0.25.8
rolldown: 1.0.0-beta.30
rollup: 4.46.2
vite: 6.3.5(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)
unplugin-yaml@3.0.2(@nuxt/kit@3.14.1592(magicast@0.3.5)(rollup@4.46.2))(@nuxt/schema@3.14.1592(magicast@0.3.5)(rollup@4.46.2))(astro@5.10.1(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(rollup@4.46.2)(terser@5.43.1)(tsx@4.20.3)(typescript@5.9.2)(yaml@2.8.0))(esbuild@0.25.8)(rolldown@1.0.0-beta.30)(rollup@4.46.2)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(less@4.4.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)):
dependencies:
'@rollup/pluginutils': 5.2.0(rollup@4.46.2)