Skip to main content
Version: 1.0.3

Quiz Form

The QuizForm component provides a fully animated, multi-step survey and onboarding form interface. It supports single-choice, multiple-choice, and star/numeric rating questions, with a token-based variant system that makes adding new visual styles a zero-logic-change operation.

Question 1 of 425%
Single Choice

How did you first hear about us?

Installation

ignix add component quiz-form

Basic Usage

The most common way to use QuizForm is by passing an array of questions and an onSubmit handler.

import { QuizForm } from '@ignix-ui/quiz-form';

const questions = [
{
id: 'experience',
type: 'single',
question: 'How was your experience?',
options: ['Excellent', 'Good', 'Average', 'Poor'],
required: true,
},
{
id: 'feedback',
type: 'rating',
question: 'How likely are you to recommend us?',
scale: 10,
}
];

export default function App() {
return (
<QuizForm
questions={questions}
onSubmit={(answers) => console.log(answers)}
/>
);
}

Examples

Feedback survey

import { QuizForm } from '@ignix-ui/quiz-form';

<QuizForm
questions={questions}
onSubmit={(answers) => console.log(answers)}
cardVariant="default"
showResult={true}
/>

Onboarding flow with step labels

<QuizForm
questions={onboardingQuestions}
onSubmit={handleSubmit}
stepLabels={['Role', 'Team', 'Goals', 'Experience']}
submitLabel="Finish Setup"
nextLabel="Next Step"
/>

Gradient variant

<QuizForm questions={questions} onSubmit={handleSubmit} cardVariant="gradient" />

Pre-filled answers

<QuizForm
questions={questions}
onSubmit={handleSubmit}
initialAnswers={{ q1: 'Social Media', q3: 4 }}
/>

Sub-components

All sub-components consume QuizFormContext internally.

ComponentDescription
QuizForm.ProgressBarAnimated progress bar.
QuizForm.QuestionCardCurrent question card.
QuizForm.RadioGroupSingle-choice group.
QuizForm.CheckboxGroupMultiple-choice grid.
QuizForm.RatingScaleStar or numeric rating.
QuizForm.NavigationButtonsNav controls.
QuizForm.ResultPageResults summary.
QuizForm.AccentBarTheme accent bar.

useQuizForm hook

Access context from any sub-component:

import { useQuizForm } from '@ignix-ui/quizform';

function MyCustomControl() {
const { step, total } = useQuizForm();
return <span>{step + 1} / {total}</span>;
}

Features

  • Multi-Step Survey: Guide users through questions.
  • Animated Transitions: Smooth question sliding.
  • Question Types: Single, multiple, and rating.
  • Progress Tracking: Visual and pill-based indicators.
  • Token-Based Variants: Easy visual customization.
  • Results Summary: Built-in completion screen.
  • Responsive Design: Optimized for mobile.
  • TypeScript Support: Fully typed.

Props

<QuizForm>

PropTypeDefaultDescription
questionsQuestion[]Required questions.
onSubmit(answers: QuizAnswers) => voidSubmission callback.
onStepChange(step: number, total: number) => voidundefinedNavigation callback.
initialAnswersQuizAnswers{}Pre-populated data.
cardVariant'default' | 'gradient' | 'bordered' | 'dark''default'Visual style.
showResultbooleantrueShow results.
stepLabelsstring[]undefinedStep pills.
submitLabelstring'Submit'Submit label.
nextLabelstring'Continue'Next label.
backLabelstring'Back'Back label.
classNamestringundefinedWrapper class.
childrenReact.ReactNodeundefinedCustom content.
theme'light' | 'dark''light'Theme selection.

Question object

FieldTypeRequiredDescription
idstringUnique key.
type'single' | 'multiple' | 'rating'Control type.
questionstringQuestion text.
hintstringHelper text.
optionsstring[]Choice options.
scalenumberRating range.
requiredbooleanAllow skipping.