async function* listenForm(
form,
{
validate = (d) => true,
value = (d) => d,
submit = (d) => d?.submit || 0
} = {}
) {
let prevSubmit = 0;
for await (const d of Generators.input(form)) {
const newSubmit = submit(d);
if (!d || newSubmit === prevSubmit) continue;
prevSubmit = newSubmit;
if (validate(d)) yield await value(d);
}
}