PatternDisponible

Questionnaire

Cuestionario de selección única con validación de respuestas obligatorias.

Loading example…

Instalación

Agrega el componente y sus dependencias desde el registro que está ejecutándose en tu computadora.

terminal
npx shadcn@latest add https://brutallab.facilito.dev/r/questionnaire.json

Uso

Importa el componente en tu proyecto y conserva el código bajo tu control.

tsx
'use client';

import { useState } from 'react';
import { Questionnaire } from '@/components/ui/questionnaire';

export default function Demo() {
  const [complete, setComplete] = useState(false);
  return (
    <div className="grid w-full max-w-lg gap-5">
      <Questionnaire
        questions={[
          {
            id: 'experience',
            title: 'How often do you build interfaces?',
            options: [
              { value: 'weekly', label: 'Every week' },
              { value: 'monthly', label: 'A few times a month' },
            ],
          },
          {
            id: 'focus',
            title: 'What would you like to practice?',
            options: [
              { value: 'forms', label: 'Forms' },
              { value: 'navigation', label: 'Navigation' },
            ],
          },
        ]}
        onComplete={() => setComplete(true)}
      />
      <output>
        {complete
          ? 'Thanks. Your demo answers were accepted locally.'
          : 'Choose one answer per question.'}
      </output>
    </div>
  );
}

Estados e interacción

Aspecto, comportamiento y comprobación con teclado.

  • La composición hereda los estados de sus controles. Prueba valores vacíos, contenido, carga y error cuando correspondan a la aplicación.
  • Los ejemplos de esta página son ejecutables; el código mostrado usa los mismos componentes. La lógica de negocio pertenece al consumidor.
  • Prueba el ejemplo con Tab y Shift+Tab. El foco debe seguir visible en ambos temas.

Referencia API

Propiedades propias de BrutalLab. También acepta los atributos nativos correspondientes.

PropTipoDefaultDescripción
Question[]—Questions with stable IDs and option values.
(answers) => void—Called only after every question is answered.
stringSubmit answersText of the submit action.

Accesibilidad

Reglas que deben conservarse cuando el componente se adapte a un producto.

Cada pregunta necesita un t?tulo y opciones con etiquetas. El env?o valida todas las respuestas; onComplete recibe los datos y no los guarda autom?ticamente.

Conserva las etiquetas visibles y el HTML semántico del ejemplo.

Mantén el foco visible y comprueba la composición mediante el teclado.

Personaliza el aspecto con className sin reemplazar los atributos ARIA de la primitiva.