+ )
+}
+
interface BacklogFilterPopoverProps {
open: boolean
onOpenChange: (open: boolean) => void
diff --git a/docs/specs/dialogs/answer-modal.md b/docs/specs/dialogs/answer-modal.md
index edcfb97..d762f2d 100644
--- a/docs/specs/dialogs/answer-modal.md
+++ b/docs/specs/dialogs/answer-modal.md
@@ -3,7 +3,7 @@ title: "AnswerModal Profiel"
status: active
audience: [ai-agent, contributor]
language: nl
-last_updated: 2026-05-04
+last_updated: 2026-05-15
---
# AnswerModal Profiel
@@ -47,7 +47,7 @@ Gebruikt `entityDialogContentClasses` (§4 spec). Body bevat naast de textarea o
### Multiple-choice mode
-Als `question.options` niet leeg is, wordt de textarea vervangen door een lijst van knoppen. Klikken op een knop submit direct met die waarde. De submit-knop in de footer wordt dan verborgen (alleen Annuleren blijft).
+Als `question.options` niet leeg is, worden de opties getoond als een lijst van knoppen. Klikken op een knop submit direct met die waarde. Het vrije tekstveld en de Verstuur-knop blijven altijd zichtbaar — ook in multiple-choice mode. Zo kan de gebruiker naast de vaste opties ook een eigen antwoord typen en versturen.
### Optimistic remove
@@ -64,5 +64,5 @@ Action geeft alleen `{ ok, error: string }` terug — geen 422-fieldErrors omdat
## Bewust NIET in v1
- ❌ **Markdown rendering** — antwoord wordt als plain text doorgegeven; Claude leest 'm direct als context.
-- ❌ **Cmd/Ctrl+Enter shortcut** — werkt wél voor de textarea-mode (via `useDialogSubmitShortcut`); voor multiple-choice mode is er geen submit om te triggeren.
+- ✅ **Cmd/Ctrl+Enter shortcut** — werkt via `useDialogSubmitShortcut` in zowel textarea-mode als multiple-choice mode (het vrije tekstveld is altijd aanwezig).
- ❌ **Bulk-answer** — één vraag tegelijk per dialog.
diff --git a/lib/user-settings.ts b/lib/user-settings.ts
index e294dc9..7137006 100644
--- a/lib/user-settings.ts
+++ b/lib/user-settings.ts
@@ -1,5 +1,6 @@
import { z } from 'zod'
import { JOBS_TIME_FILTER_VALUES } from '@/lib/jobs-time-filter'
+import { IDEA_STATUS_API_VALUES, type IdeaStatusApi } from '@/lib/idea-status'
const PriorityFilter = z.union([
z.number().int().min(1).max(4),
@@ -37,12 +38,19 @@ const JobsViewPrefs = z.object({
timeFilter: z.enum(JOBS_TIME_FILTER_VALUES).optional(),
}).strict()
+const IdeasListPrefs = z.object({
+ filterStatuses: z.array(
+ z.enum(IDEA_STATUS_API_VALUES as [IdeaStatusApi, ...IdeaStatusApi[]])
+ ).optional(),
+}).strict()
+
const ViewsPrefs = z.object({
sprintBacklog: SprintBacklogPrefs.optional(),
pbiList: PbiListPrefs.optional(),
storyPanel: StoryPanelPrefs.optional(),
jobsColumns: z.record(z.string(), JobsColumnPrefs).optional(),
jobs: JobsViewPrefs.optional(),
+ ideasList: IdeasListPrefs.optional(),
}).strict()
const DevToolsPrefs = z.object({