import React, { useCallback, useMemo, useState } from 'react'; import * as Tone from 'tone'; import useRepl from '@strudel/hooks/useRepl.mjs'; import CodeMirror, { markEvent } from '../CodeMirror'; import cx from '../cx'; const defaultSynth = new Tone.PolySynth().chain(new Tone.Gain(0.5), Tone.Destination).set({ oscillator: { type: 'triangle' }, envelope: { release: 0.01, }, }); // "balanced" | "interactive" | "playback"; // Tone.setContext(new Tone.Context({ latencyHint: 'playback', lookAhead: 1 })); function MiniRepl({ tune, maxHeight = 500 }) { const [editor, setEditor] = useState(); const { code, setCode, activateCode, activeCode, setPattern, error, cycle, dirty, log, togglePlay, hash } = useRepl({ tune, defaultSynth, autolink: false, onDraw: useCallback(markEvent(editor), [editor]), }); const lines = code.split('\n').length; const height = Math.min(lines * 30 + 30, maxHeight); return (
{error && {error.message}}
{' '}
setCode(value)} />
{/*
open in REPL
*/}
); } export default MiniRepl;