task modal: add multi-line 'text' input type (textarea)

`type: string` renders a single-line <input>; the new `type: text` renders a
resizable multi-line <textarea> (6 rows) — for pasted multi-line values like
lyrics. Checked before options/default so `text` always means free-form text.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-27 15:54:27 +00:00
co-authored by Claude Opus 4.8
parent 3de22a3166
commit 48d24544f3
@@ -463,6 +463,22 @@ const TaskInputForm = ({
);
}
if (def.type === 'text') {
return (
<div key={key} className="flex flex-col gap-1">
<label className="text-xs font-medium text-duck-dark/70 dark:text-foreground/70">
{def.description ?? key}
</label>
<textarea
value={values[key] ?? ''}
onChange={(e) => onChange(key, e.target.value)}
rows={6}
className="px-3 py-1.5 text-sm rounded-lg border border-duck-dark/15 dark:border-foreground/15 bg-background focus:outline-none focus:ring-1 focus:ring-duck-teal resize-y whitespace-pre-wrap"
/>
</div>
);
}
if (def.options && def.options.length > 0) {
const selected = values[key] ?? def.default ?? def.options[0]!;
return (