Ballmac UI home

Questionnaire

A multi-step questionnaire with single-choice, multiple-choice, freeform and skippable questions, answer shortcuts, validation and native form data, built on shadcn's headless Questionnaire so the API is the same.

Question 1 of 2
What should we prototype next?

Choose a direction or write your own.

Installation

$ pnpm dlx shadcn@latest add @ballmac/questionnaire

Usage

import { Questionnaire, QuestionnaireActions, QuestionnaireChoice, QuestionnaireChoiceDescription, QuestionnaireChoices, QuestionnaireDescription, QuestionnaireError, QuestionnaireInput, QuestionnaireItem, QuestionnaireNext, QuestionnairePrevious, QuestionnaireProgress, QuestionnaireSkip, QuestionnaireSubmit, QuestionnaireTitle } from "@/components/ballmac/questionnaire"

The full example is in the Code tab above.

Examples

Multiple selection

Letter shortcuts

Optional and skippable

Question 1 of 2
Who is this for?

Your own validation

What should the project include?

In a card

Before we start
Two quick questions so the first run fits you.

Accessibility

KeyAction
Tab / arrow keysNative radio and checkbox behavior in each question
Letter or number keysWith shortcuts set, choose the answer with that key; it does not advance
EnterNext on a question, Submit on the last
Screen readersEach question is a fieldset named by its legend; descriptions and errors are linked; progress is a named progress bar; inactive questions are inert
After a failed stepFocus goes to an answer of the question that needs one, and its error is announced

Quality scorecard

6/6

Every applicable check passes

Measured in Chromium 153.0.8010.12 on October 19, 2026, on version 1.0.0, across 6 examples.

How we measure
  • Passed: Accessibility scan

    No serious or critical issues in light and dark, on a phone and a desktop (axe-core 4.13.0, WCAG 2.1 AA and best-practice rules).

  • Passed: Small screens

    No sideways scrolling at 360, 390 or 1280 px wide.

  • Passed: Reduced motion

    No endless animation to begin with.

  • Passed: Right to left

    Mirrors correctly in Arabic, Hebrew, Persian and Urdu layouts (0% of elements off the mirror, limit 15%).

  • Passed: Clean console

    No console errors or React hydration errors while loading.

  • Passed: Keyboard

    16 tab stops, each showing a visible change when it takes focus. 5 documented keys.

  • Not applicable: Loading, empty and error

    It collects answers and hands them to onSubmit as form data; saving them, and any loading or failure around that, belongs to the page that owns the form.

  • For information: Automated tests

    No test file of its own yet.

  • For information: Footprint

    2.4 KB of source (gzip) in 1 file. Installs @shadcn/react, lucide-react.

Automated checks find a subset of problems and do not replace testing with a screen reader and a keyboard in your own app. What they miss.

Use with AI

<Questionnaire items onSubmit> with a <QuestionnaireItem name required> per question: Title, Description, Choices holding <QuestionnaireChoice value> and optionally <QuestionnaireInput aria-label>, and an Error. Add <QuestionnaireActions> with Previous, Skip, Next and Submit. Answers are native FormData. With the shadcn MCP server set up (guide), ask your agent:

Add the Ballmac UI Questionnaire (@ballmac/questionnaire) to this project with the shadcn MCP, then use it where it fits.

Use it for

  • An AI agent asking the person to choose between options before it continues
  • Onboarding and intake steps with a few questions
  • Surveys where answers become form data

Not for

  • One question inside a form; use radio-group or checkbox
  • A long form with many field types; use form blocks
  • Quizzes that score answers; compute that yourself from the form data

Registry JSON: https://ui.ballmac.com/r/questionnaire.json

Credits

Based on shadcn/ui Questionnaire, adapted by Ballmac. Free to use in personal and commercial projects.

Ballmac UI Pro

Need the whole screen, not one piece?

150 premium blocks (dashboards, settings, calendars, mail, shops, onboarding), a private shadcn registry and Figma tokens. Blocks that show data come with loading, empty and error states built in.

Not ready? Try three Pro blocks free

Leave your email and the blocks appear right here, ready to copy. Yours to use in any project.