diff options
| author | Pinapelz <yukais@pinapelz.com> | 2026-04-16 20:45:20 -0700 |
|---|---|---|
| committer | Pinapelz <yukais@pinapelz.com> | 2026-04-16 20:45:20 -0700 |
| commit | c638c899c097e1fb9c7f24cecad4afa1ca85e01a (patch) | |
| tree | 5fd6fb885b8485055d72b1a9a2aa9364123245e1 | |
| parent | cc95d5cebbd743cd8abcc0bcd62a40f82faebebe (diff) | |
fix: allow offset to be negative in player control panel
| -rw-r--r-- | src/app/player/page.tsx | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/src/app/player/page.tsx b/src/app/player/page.tsx index 2ac6d50..0806c3b 100644 --- a/src/app/player/page.tsx +++ b/src/app/player/page.tsx @@ -63,6 +63,7 @@ function KaraokePage() { const supplementAudioRef = useRef<HTMLAudioElement>(null); const [captionsText, setCaptionsText] = useState<string>(""); const [offset, setOffset] = useState<number>(0); + const [offsetInput, setOffsetInput] = useState<string>("0"); const [dragOver, setDragOver] = useState<boolean>(false); const [statusText, setStatusText] = useState<string>("No video selected"); const [balance, setBalance] = useState<number>(0); @@ -94,6 +95,10 @@ function KaraokePage() { localStorage.setItem("fontColor", fontColor); }, [fontColor]); + useEffect(() => { + setOffsetInput(String(offset)); + }, [offset]); + const handleResizeMouseDown = useCallback( (e: React.MouseEvent<HTMLDivElement>) => { e.preventDefault(); @@ -567,8 +572,19 @@ function KaraokePage() { <PanelFieldLabel>Offset</PanelFieldLabel> <PanelNumberInput type="number" - value={offset} - onChange={(e) => setOffset(Number(e.target.value))} + value={offsetInput} + onChange={(e) => { + const next = e.target.value; + if (next === "" || next === "-" || next === "+") { + setOffsetInput(next); + return; + } + const parsed = Number(next); + if (!Number.isNaN(parsed)) { + setOffset(parsed); + setOffsetInput(next); + } + }} step="25" /> |
