function cycling(prelude, choices, results) {
let form = html`<form name=form>
<span>${prelude}</span>
<input name=input type=button />
<output name=output />
</form>`
let widget = form.input
let branching = Array.isArray(results)
let idx = 0
function onClick(e) {
e && e.preventDefault()
idx = idx == choices.length-1 ? 0 : idx+1
refresh()
form.dispatchEvent(new CustomEvent("input"))
}
function refresh() {
widget.value = choices[idx]
form.value = [choices[idx], idx]
form.output.value = branching ? results[idx] : results
}
refresh()
widget.onclick = onClick
return form
}