feat(ui): redesign voice cockpit with clinical companion drawer, Svelte 5 migration, and Gemini 3.8 voice
- Re-architect VoiceSession into full-bleed studio cockpit with overlay slide-over companion drawer - Eliminate width squishing defect on LiveInsightPanel and add native dark/light theme support - Integrate authentic Google Gemini 3.8 Flash TTS with Fenrir persona and fallback audio pipeline - Implement comprehensive Playwright E2E visual regression suite across Desktop, iPad, and iPhone (21 tests, 45 snapshots) - Migrate core application to Svelte 5 runes (, , ) with reactive stores - Maintain .NET 8 Azure Functions serverless endpoints and clean build hygiene
This commit is contained in:
1 parent
c82b112624
commit
1feea40684
148 files changed
+11230
-1706
No files matched your search
+24
-2
@@ -1,6 +1,8 @@
|
||||
/// <reference types="vitest" />
|
||||
import path from 'path';
|
||||
import { defineConfig, loadEnv } from 'vite';
|
||||
import react from '@vitejs/plugin-react';
|
||||
import { svelte } from '@sveltejs/vite-plugin-svelte';
|
||||
import { VitePWA } from 'vite-plugin-pwa';
|
||||
import pkg from './package.json';
|
||||
|
||||
@@ -13,6 +15,7 @@ export default defineConfig(({ mode }) => {
|
||||
},
|
||||
plugins: [
|
||||
react(),
|
||||
svelte(),
|
||||
VitePWA({
|
||||
strategies: 'injectManifest',
|
||||
srcDir: '.',
|
||||
@@ -51,15 +54,34 @@ export default defineConfig(({ mode }) => {
|
||||
})
|
||||
],
|
||||
define: {
|
||||
'process.env.API_KEY': JSON.stringify(env.VITE_GEMINI_API_KEY),
|
||||
'process.env.GEMINI_API_KEY': JSON.stringify(env.VITE_GEMINI_API_KEY),
|
||||
'process.env.OPENROUTER_API_KEY': JSON.stringify(env.VITE_OPENROUTER_API_KEY || env.OPENROUTER_API_KEY || ''),
|
||||
'process.env.GEMINI_API_KEY': JSON.stringify(env.VITE_GEMINI_API_KEY || env.GEMINI_API_KEY || ''),
|
||||
'process.env.API_KEY': JSON.stringify(env.VITE_GEMINI_API_KEY || env.GEMINI_API_KEY || ''),
|
||||
'__APP_VERSION__': JSON.stringify(pkg.version),
|
||||
'__BUILD_TIMESTAMP__': JSON.stringify(new Date().toISOString()),
|
||||
},
|
||||
build: {
|
||||
chunkSizeWarningLimit: 600,
|
||||
rollupOptions: {
|
||||
output: {
|
||||
manualChunks(id) {
|
||||
if (id.includes('node_modules')) {
|
||||
if (id.includes('@lucide/svelte') || id.includes('lucide-react')) return 'vendor-icons';
|
||||
if (id.includes('svelte')) return 'vendor-svelte';
|
||||
if (id.includes('workbox')) return 'vendor-workbox';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
resolve: {
|
||||
alias: {
|
||||
'@': path.resolve(__dirname, '.'),
|
||||
}
|
||||
},
|
||||
test: {
|
||||
include: ['test/**/*.test.ts'],
|
||||
environment: 'node'
|
||||
}
|
||||
};
|
||||
});
|
||||
Reference in new issue
Block a user