feat: comprehensive React SPA replacing Jinja2 UI
- New dark UI with 7 tabs: Rig, FX Chain, Models, IRs, Presets, Settings, Record - All screens wired to live API endpoints - Real-time state via WebSocket + polling fallback - Models screen: list/load/unload/upload NAM files + Tone3000 search/install - IRs screen: list/load/unload/upload IR files + Tone3000 search/install - Presets screen: browse banks, activate, save, delete - Settings screen: WiFi scan/connect/hotspot, Bluetooth/MIDI, 4CM routing - Rig screen: live state, volume, bypass, tuner, signal chain - FX Chain screen: block params, per-block bypass - Serves at / instead of /ui - Built with Vite, ~71KB gzipped
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
import js from '@eslint/js'
|
||||
import globals from 'globals'
|
||||
import reactHooks from 'eslint-plugin-react-hooks'
|
||||
import reactRefresh from 'eslint-plugin-react-refresh'
|
||||
import { defineConfig, globalIgnores } from 'eslint/config'
|
||||
|
||||
export default defineConfig([
|
||||
globalIgnores(['dist']),
|
||||
{
|
||||
files: ['**/*.{js,jsx}'],
|
||||
extends: [
|
||||
js.configs.recommended,
|
||||
reactHooks.configs.flat.recommended,
|
||||
reactRefresh.configs.vite,
|
||||
],
|
||||
languageOptions: {
|
||||
globals: globals.browser,
|
||||
parserOptions: { ecmaFeatures: { jsx: true } },
|
||||
},
|
||||
},
|
||||
])
|
||||
Reference in New Issue
Block a user