/* ============================================================ AUDIO PAGE — Audio Settings Design: Reference luxsin_x8_音频设置.png Sections: - 平衡与灵敏度: 左右平衡 slider, VU灵敏度 slider - 输出特性: 滤波特性, 耳机增益, 音量幅度 - IIS设置: IIS静音电平, IIS模式 - 系统与接口: 开机音量, XLR极性 All list rows → navigate to /select page ============================================================ */ import { useDevice } from "@/contexts/DeviceContext"; import { ChevronLeft, ChevronRight } from "lucide-react"; import { useLocation } from "wouter"; import { useState, useEffect, useRef } from "react"; import BottomNav from "@/components/BottomNav"; import { navigateToSelect } from "./SelectPage"; import { getBootSoundMaxIndex } from "@/config/firmwareFeatures"; import { normalizeBootSound, parseFirmwareVersion, readBootSoundFromState, } from "@/lib/luxsinApi"; import localeEn from "@/locales/data-en.json"; import { resolveLocalePack } from "@/locales/resolveLocale"; import { usePageTitleWithConnection } from "@/hooks/usePageTitleWithConnection"; function CyanSlider({ value, min, max, step = 1, onChange, onRelease }: { value: number; min: number; max: number; step?: number; onChange: (v: number) => void; /** Commit to device once when the user releases the thumb (pointer / keyboard). */ onRelease?: (v: number) => void; }) { const fillPct = ((value - min) / (max - min)) * 100; const emitRelease = (el: EventTarget | null) => { if (!(el instanceof HTMLInputElement)) return; onRelease?.(Number(el.value)); }; return (