Questionnaire
A multi-step questionnaire with single-choice, multiple-choice, freeform, and skippable questions.
Installation
npx shadcn@latest add https://reactdocs.canceydejean.dev/r/questionnaire.jsonUsage
A multi-step questionnaire for single-choice, multiple-choice, freeform, and skippable items. Built
on @shadcn/react/questionnaire.
import {
Questionnaire,
QuestionnaireActions,
QuestionnaireChoice,
QuestionnaireChoices,
QuestionnaireDescription,
QuestionnaireError,
QuestionnaireInput,
QuestionnaireItem,
QuestionnaireNext,
QuestionnairePrevious,
QuestionnaireProgress,
QuestionnaireSkip,
QuestionnaireSubmit,
QuestionnaireTitle,
} from "@/components/questionnaire/questionnaire";
const items = [
{
name: "direction",
required: true,
choices: [
{ value: "delegation" },
{ value: "questions" },
{ value: "both" },
],
},
] as const;
function handleSubmit(event: React.FormEvent<HTMLFormElement>) {
event.preventDefault();
const answers = new FormData(event.currentTarget);
// answers.get("direction")
}
export function Example() {
return (
<Questionnaire items={items} onSubmit={handleSubmit}>
<QuestionnaireProgress />
<QuestionnaireItem name="direction" required>
<QuestionnaireTitle>What should we prototype next?</QuestionnaireTitle>
<QuestionnaireDescription>
Choose a direction or write your own.
</QuestionnaireDescription>
<QuestionnaireChoices>
<QuestionnaireChoice value="delegation">
<span className="font-medium">Delegation</span>
</QuestionnaireChoice>
<QuestionnaireChoice value="questions">
<span className="font-medium">Question prompts</span>
</QuestionnaireChoice>
<QuestionnaireChoice value="both">
<span className="font-medium">Both together</span>
</QuestionnaireChoice>
<QuestionnaireInput
aria-label="Another answer"
placeholder="Type another answer…"
/>
</QuestionnaireChoices>
<QuestionnaireError />
</QuestionnaireItem>
<QuestionnaireActions>
<QuestionnairePrevious />
<QuestionnaireSkip />
<QuestionnaireNext />
<QuestionnaireSubmit />
</QuestionnaireActions>
</Questionnaire>
);
}