MVP: Go daemon, password auth, persistent PTY terminals, React/xterm UI, PWA
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5.1
parent
190604247f
commit
436732dac0
@@ -0,0 +1,18 @@
|
||||
import { useState } from 'react'
|
||||
|
||||
const KEYS: [string, string][] = [
|
||||
['Esc', '\x1b'], ['Tab', '\t'], ['↑', '\x1b[A'], ['↓', '\x1b[B'], ['←', '\x1b[D'], ['→', '\x1b[C'],
|
||||
['Home', '\x1b[H'], ['End', '\x1b[F'], ['|', '|'], ['~', '~'], ['-', '-'], ['/', '/'], ['^C', '\x03'], ['^D', '\x04'],
|
||||
]
|
||||
|
||||
export default function KeyBar({ send, setCtrl }: { send: (s: string) => void; setCtrl: (v: boolean) => void }) {
|
||||
const [ctrl, setCtrlState] = useState(false)
|
||||
const toggle = () => { const v = !ctrl; setCtrlState(v); setCtrl(v) }
|
||||
const press = (s: string) => { send(s); if (ctrl) { setCtrlState(false); setCtrl(false) } }
|
||||
return (
|
||||
<div className="keybar" onMouseDown={(e) => e.preventDefault()}>
|
||||
<button className={ctrl ? 'on' : ''} onClick={toggle}>Ctrl</button>
|
||||
{KEYS.map(([label, seq]) => <button key={label} onClick={() => press(seq)}>{label}</button>)}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user