+ {choices.map((ch) => {
+ const vals = getVals(ch.key);
+ const filled = vals.filter(Boolean).length;
+ return (
+
+
+ {ch.label}
+ {ch.source}
+ {filled < ch.count && choose {ch.count - filled}}
+
+
+ {Array.from({ length: ch.count }).map((_, i) => {
+ const val = vals[i] ?? '';
+ return ch.options ? (
+
+ ) : (
+ setVal(ch.key, i, e.target.value)} aria-label={`${ch.label} ${i + 1}`} placeholder={`${ch.label} ${i + 1}`} />
+ );
+ })}
+
+ {ch.hint &&
{ch.hint}
}
+