static SimpleLiveValue lvFlexibleRateTimerFreq(FlexibleRateTimer timer, O... _) { SimpleLiveValue lvRate = stringLiveValue(); optPar int delayOnInput = 1000; // how long to wait after someone typed a new frequency value (ms) embedded S formattedFrequency() { ret formatDouble(timer.getFrequency(), 3); } lvRate.onChange(rLater(delayOnInput, r { S s = trim(lvRate!); if (eq(s, formattedFrequency())) ret; Double hz = parseDoubleOpt(s), ret if null; timer.setFrequencyImmediately(hz); })); timer.onFrequencyChangedAndNow(r{ lvRate.set(formattedFrequency()) }); ret lvRate; }