import { useSyncExternalStore } from 'react'; import { midiManager } from '../input/webmidi.ts'; import { keyboardPiano } from '../input/keyboardPiano.ts'; function useMidiState() { return useSyncExternalStore( (cb) => midiManager.subscribeState(cb), () => midiManager.getState(), ); } function useKbdState(): number { // encodes enabled+octave so the snapshot is a stable primitive return useSyncExternalStore( (cb) => keyboardPiano.subscribeState(cb), () => (keyboardPiano.enabled ? keyboardPiano.octave : -1), ); } export function DeviceBar() { const midi = useMidiState(); const kbd = useKbdState(); return (
{midi.supported ? ( midi.requested && !midi.error ? ( <> 0 ? 'ok' : ''}`} title={midi.inputs.length > 0 ? 'MIDI inputs connected' : 'no MIDI inputs'} /> ) : midi.error ? ( MIDI unavailable ) : ( ) ) : ( No Web MIDI in this browser )}
); }