# Question list
> Generated from question-list.contract.json — do not edit by hand.

An editable list of collapsible questions — each a prompt field plus its OptionRow choices — with a full-width "+ Add question" that disables at max; composes NumberedItem + OptionRow (SETTINGS-31/36).

Tier: **leaf-lit**. Frameworks: HTML (paste-and-run, no build step) · React · Vue 3.

Surfaces: editor, settings.

## Props
| Prop | Type | Default | Notes |
| --- | --- | --- | --- |
| `questions` | Array<{id,prompt,options:[{id,text,correct}]}> | `[]` | The model; set as a property or a JSON attribute |
| `min` | number | `1` | Minimum questions — delete disables at this count |
| `max` | number | `∞` | Maximum questions — +Add disables at this count |
| `minoptions` | number | `2` | Minimum options per question — option delete disables at this count |
| `maxoptions` | number | `∞` | Maximum options per question — +Add option disables at this count |
| `disabled` | boolean | `false` | Disable adding questions |
| `change` | CustomEvent<{questions}> | `—` | Composed event on any edit; read e.detail.questions (the full model) |

## Visual standard (measured)
- Question: a collapsible NumberedItem — prompt (counted input) + OptionRow choices + "+ Add option"
- Add question: full-width dashed "+ Add question" (system-plus), disabled at max (SETTINGS-31)
- Add option: per-question "+ Add option", disabled at maxoptions
- Limits: no "X of Y" counter — +Add disables at max, delete disables at min (SETTINGS-36)
- Delete: question delete disables at min; option delete disables at minoptions

## When to use
- **Question list** — an editable set of questions, each with its own prompt + choices (a quiz builder, a survey)
- **Option row list** — a flat list of options for ONE question — compose OptionRow directly

The primary +Add spans the full panel width (SETTINGS-31) — never hugged to one side. Never a textual "X of Y" count (SETTINGS-36) — the +Add disables at max and delete disables at min. Composes NumberedItem + OptionRow; it does not re-implement the numbered card or the option row.
