mirror of
https://github.com/jamiepine/voicebox.git
synced 2026-09-15 04:40:40 -07:00
- Rename Server tab to Settings with horizontal sub-tab navigation (General, Generation, GPU, Logs, Changelog) - All sub-tabs are proper routes under /settings/* with /server redirect for backwards compat - General: connection settings, link cards (docs + discord), API reference card, app updates - Generation: auto-chunking, crossfade, normalize, autoplay as SettingRow components - GPU: info card with platform-aware icons (Apple logo for MPS), CUDA management, explainer text - Logs: real-time server log viewer piped from Tauri sidecar via event system (Tauri-only) - Changelog: parsed from CHANGELOG.md at build time via Vite virtual module plugin - New reusable SettingRow/SettingSection components for consistent settings layout - New Toggle (switch) UI component replacing checkboxes in settings - Toast viewport now offsets when audio player is open - Sidebar stays active on settings sub-routes (fuzzy matching)
24 lines
672 B
TypeScript
24 lines
672 B
TypeScript
import { readFileSync } from 'node:fs';
|
|
import path from 'node:path';
|
|
import type { Plugin } from 'vite';
|
|
|
|
/** Vite plugin that exposes CHANGELOG.md as `virtual:changelog`. */
|
|
export function changelogPlugin(repoRoot: string): Plugin {
|
|
const virtualId = 'virtual:changelog';
|
|
const resolvedId = '\0' + virtualId;
|
|
const changelogPath = path.resolve(repoRoot, 'CHANGELOG.md');
|
|
|
|
return {
|
|
name: 'changelog',
|
|
resolveId(id) {
|
|
if (id === virtualId) return resolvedId;
|
|
},
|
|
load(id) {
|
|
if (id === resolvedId) {
|
|
const raw = readFileSync(changelogPath, 'utf-8');
|
|
return `export default ${JSON.stringify(raw)};`;
|
|
}
|
|
},
|
|
};
|
|
}
|