{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "questionnaire",
  "title": "Questionnaire",
  "description": "Step-by-step question flow with single and multiple choice answers.",
  "dependencies": [
    "@shadcn/react@^0.3.1",
    "lucide-react@^1.48.0"
  ],
  "registryDependencies": [
    "https://rdf.dev.360online.com/r/button.json"
  ],
  "files": [
    {
      "path": "registry/rapid/ui/questionnaire/questionnaire.tsx",
      "content": "'use client'\n\nimport { Questionnaire as QuestionnairePrimitive } from '@shadcn/react/questionnaire'\nimport { CheckIcon } from 'lucide-react'\nimport type * as React from 'react'\n\nimport { type Button, buttonVariants } from '@/components/ui/button'\nimport { cn } from '@/lib/utils'\n\nfunction Questionnaire({ className, ...props }: React.ComponentProps<typeof QuestionnairePrimitive.Root>) {\n\treturn (\n\t\t<QuestionnairePrimitive.Root\n\t\t\tdata-slot=\"questionnaire\"\n\t\t\tclassName={cn('flex w-full min-w-0 flex-col gap-4', className)}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\n\nfunction QuestionnaireProgress({ className, ...props }: React.ComponentProps<typeof QuestionnairePrimitive.Progress>) {\n\treturn (\n\t\t<QuestionnairePrimitive.Progress\n\t\t\tdata-slot=\"questionnaire-progress\"\n\t\t\tclassName={cn('min-h-[1lh] w-fit min-w-[14ch] text-xs font-medium text-muted-foreground tabular-nums', className)}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\n\nfunction QuestionnaireItem({ className, ...props }: React.ComponentProps<typeof QuestionnairePrimitive.Item>) {\n\treturn (\n\t\t<QuestionnairePrimitive.Item\n\t\t\tdata-slot=\"questionnaire-item\"\n\t\t\tclassName={cn('flex min-w-0 flex-col gap-4 border-0 p-0 outline-none', className)}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\n\nfunction QuestionnaireTitle({ className, ...props }: React.ComponentProps<typeof QuestionnairePrimitive.Title>) {\n\treturn (\n\t\t<QuestionnairePrimitive.Title\n\t\t\tdata-slot=\"questionnaire-title\"\n\t\t\tclassName={cn(\n\t\t\t\t'font-heading text-base leading-snug font-medium text-pretty [&:not(:has(~[data-slot=questionnaire-description]))]:mb-4',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\n\nfunction QuestionnaireDescription({\n\tclassName,\n\t...props\n}: React.ComponentProps<typeof QuestionnairePrimitive.Description>) {\n\treturn (\n\t\t<QuestionnairePrimitive.Description\n\t\t\tdata-slot=\"questionnaire-description\"\n\t\t\tclassName={cn('text-sm text-pretty text-muted-foreground', className)}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\n\nfunction QuestionnaireChoices({ className, ...props }: React.ComponentProps<typeof QuestionnairePrimitive.Choices>) {\n\treturn (\n\t\t<QuestionnairePrimitive.Choices\n\t\t\tdata-slot=\"questionnaire-choices\"\n\t\t\tclassName={cn('group/questionnaire-choices grid min-w-0 gap-2', className)}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\n\nfunction QuestionnaireChoice({\n\tchildren,\n\tclassName,\n\t...props\n}: React.ComponentProps<typeof QuestionnairePrimitive.Choice>) {\n\treturn (\n\t\t<QuestionnairePrimitive.Choice\n\t\t\tdata-slot=\"questionnaire-choice\"\n\t\t\tclassName={cn(\n\t\t\t\t'group/questionnaire-choice relative flex min-h-11 cursor-pointer items-start gap-2.5 rounded-lg border border-input bg-transparent px-3 py-2.5 text-start text-sm transition-colors outline-none select-none hover:bg-muted/50 has-[>input:focus-visible]:border-ring has-[>input:focus-visible]:ring-3 has-[>input:focus-visible]:ring-ring/50 data-invalid:border-destructive dark:bg-input/20 data-checked:border-primary/40 data-checked:bg-muted dark:data-checked:bg-muted',\n\t\t\t\t'data-disabled:pointer-events-none data-disabled:cursor-not-allowed data-disabled:opacity-50',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<QuestionnairePrimitive.ChoiceInput\n\t\t\t\tdata-slot=\"questionnaire-choice-input\"\n\t\t\t\tclassName=\"absolute inset-0 z-10 size-full cursor-pointer opacity-0\"\n\t\t\t/>\n\t\t\t<span\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\tdata-slot=\"questionnaire-choice-indicator\"\n\t\t\t\tclassName=\"pointer-events-none relative flex size-4 shrink-0 translate-y-[--spacing(0.45)] items-center justify-center rounded-[4px] border border-input group-has-data-[slot=questionnaire-choice-description]/questionnaire-choice:translate-y-0.5 group-data-[type=radio]/questionnaire-choice:rounded-full group-data-checked/questionnaire-choice:border-primary group-data-checked/questionnaire-choice:bg-primary group-data-checked/questionnaire-choice:text-primary-foreground dark:bg-input/30 dark:group-data-checked/questionnaire-choice:bg-primary\"\n\t\t\t>\n\t\t\t\t<span\n\t\t\t\t\tdata-slot=\"questionnaire-choice-indicator-dot\"\n\t\t\t\t\tclassName=\"hidden size-2 rounded-full bg-primary-foreground group-data-[type=checkbox]/questionnaire-choice:hidden group-data-checked/questionnaire-choice:block\"\n\t\t\t\t/>\n\t\t\t\t<CheckIcon\n\t\t\t\t\tdata-slot=\"questionnaire-choice-indicator-check\"\n\t\t\t\t\tclassName=\"hidden size-3.5 group-data-[type=radio]/questionnaire-choice:hidden group-data-checked/questionnaire-choice:block\"\n\t\t\t\t/>\n\t\t\t</span>\n\t\t\t<QuestionnairePrimitive.ChoiceLabel\n\t\t\t\tdata-slot=\"questionnaire-choice-label\"\n\t\t\t\tclassName=\"flex min-w-0 flex-1 flex-col gap-0.5 leading-snug\"\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</QuestionnairePrimitive.ChoiceLabel>\n\t\t\t<QuestionnairePrimitive.ChoiceShortcut\n\t\t\t\tdata-slot=\"questionnaire-choice-shortcut\"\n\t\t\t\tclassName=\"pointer-events-none ms-auto hidden size-5 shrink-0 translate-y-[--spacing(0.45)] items-center justify-center rounded-md border border-input bg-background font-mono text-[0.625rem] leading-none font-medium text-muted-foreground group-has-data-[slot=questionnaire-choice-description]/questionnaire-choice:translate-y-0.5 group-data-[shortcut]/questionnaire-choice:inline-flex\"\n\t\t\t/>\n\t\t</QuestionnairePrimitive.Choice>\n\t)\n}\n\nfunction QuestionnaireChoiceDescription({ className, ...props }: React.ComponentProps<'span'>) {\n\treturn (\n\t\t<span data-slot=\"questionnaire-choice-description\" className={cn('text-muted-foreground', className)} {...props} />\n\t)\n}\n\nfunction QuestionnaireInput({ className, ...props }: React.ComponentProps<typeof QuestionnairePrimitive.Input>) {\n\treturn (\n\t\t<div data-slot=\"questionnaire-input-wrapper\" className=\"group/questionnaire-input relative w-full min-w-0\">\n\t\t\t<QuestionnairePrimitive.Input\n\t\t\t\tdata-slot=\"questionnaire-input\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'h-10 min-h-11 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base transition-[color,box-shadow,background-color] outline-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 sm:min-h-0 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40',\n\t\t\t\t\t'selection:bg-primary selection:text-primary-foreground placeholder:text-muted-foreground',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t</div>\n\t)\n}\n\nfunction QuestionnaireError({ className, ...props }: React.ComponentProps<typeof QuestionnairePrimitive.Error>) {\n\treturn (\n\t\t<QuestionnairePrimitive.Error\n\t\t\tdata-slot=\"questionnaire-error\"\n\t\t\tclassName={cn('mt-2 text-sm text-destructive', className)}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\n\nfunction QuestionnaireActions({ className, ...props }: React.ComponentProps<'div'>) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"questionnaire-actions\"\n\t\t\tclassName={cn('grid min-h-11 w-full grid-cols-[minmax(0,1fr)_auto_auto] items-center gap-2 sm:min-h-10', className)}\n\t\t\t{...props}\n\t\t/>\n\t)\n}\n\nfunction QuestionnairePrevious({\n\tchildren,\n\tclassName,\n\tsize = 'default',\n\tvariant = 'outline',\n\t...props\n}: React.ComponentProps<typeof QuestionnairePrimitive.Previous> &\n\tPick<React.ComponentProps<typeof Button>, 'size' | 'variant'>) {\n\treturn (\n\t\t<QuestionnairePrimitive.Previous\n\t\t\tdata-slot=\"questionnaire-previous\"\n\t\t\tdata-size={size}\n\t\t\tdata-variant={variant}\n\t\t\tclassName={cn(\n\t\t\t\tbuttonVariants({ size, variant }),\n\t\t\t\t'col-start-1 row-start-1 min-h-11 justify-self-start sm:min-h-0',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children ?? 'Previous'}\n\t\t</QuestionnairePrimitive.Previous>\n\t)\n}\n\nfunction QuestionnaireSkip({\n\tchildren,\n\tclassName,\n\tsize = 'default',\n\tvariant = 'outline',\n\t...props\n}: React.ComponentProps<typeof QuestionnairePrimitive.Skip> &\n\tPick<React.ComponentProps<typeof Button>, 'size' | 'variant'>) {\n\treturn (\n\t\t<QuestionnairePrimitive.Skip\n\t\t\tdata-slot=\"questionnaire-skip\"\n\t\t\tdata-size={size}\n\t\t\tdata-variant={variant}\n\t\t\tclassName={cn(\n\t\t\t\tbuttonVariants({ size, variant }),\n\t\t\t\t'col-start-2 row-start-1 min-h-11 justify-self-end sm:min-h-0',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children ?? 'Skip'}\n\t\t</QuestionnairePrimitive.Skip>\n\t)\n}\n\nfunction QuestionnaireNext({\n\tchildren,\n\tclassName,\n\tsize = 'default',\n\tvariant = 'default',\n\t...props\n}: React.ComponentProps<typeof QuestionnairePrimitive.Next> &\n\tPick<React.ComponentProps<typeof Button>, 'size' | 'variant'>) {\n\treturn (\n\t\t<QuestionnairePrimitive.Next\n\t\t\tdata-slot=\"questionnaire-next\"\n\t\t\tdata-size={size}\n\t\t\tdata-variant={variant}\n\t\t\tclassName={cn(\n\t\t\t\tbuttonVariants({ size, variant }),\n\t\t\t\t'col-start-3 row-start-1 min-h-11 justify-self-end sm:min-h-0',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children ?? 'Next'}\n\t\t</QuestionnairePrimitive.Next>\n\t)\n}\n\nfunction QuestionnaireSubmit({\n\tchildren,\n\tclassName,\n\tsize = 'default',\n\tvariant = 'default',\n\t...props\n}: React.ComponentProps<typeof QuestionnairePrimitive.Submit> &\n\tPick<React.ComponentProps<typeof Button>, 'size' | 'variant'>) {\n\treturn (\n\t\t<QuestionnairePrimitive.Submit\n\t\t\tdata-slot=\"questionnaire-submit\"\n\t\t\tdata-size={size}\n\t\t\tdata-variant={variant}\n\t\t\tclassName={cn(\n\t\t\t\tbuttonVariants({ size, variant }),\n\t\t\t\t'col-start-3 row-start-1 min-h-11 justify-self-end sm:min-h-0',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children ?? 'Submit'}\n\t\t</QuestionnairePrimitive.Submit>\n\t)\n}\n\nexport {\n\tQuestionnaire,\n\tQuestionnaireActions,\n\tQuestionnaireChoice,\n\tQuestionnaireChoiceDescription,\n\tQuestionnaireChoices,\n\tQuestionnaireDescription,\n\tQuestionnaireError,\n\tQuestionnaireInput,\n\tQuestionnaireItem,\n\tQuestionnaireNext,\n\tQuestionnairePrevious,\n\tQuestionnaireProgress,\n\tQuestionnaireSkip,\n\tQuestionnaireSubmit,\n\tQuestionnaireTitle,\n}\n",
      "type": "registry:ui",
      "target": "components/ui/questionnaire.tsx"
    }
  ],
  "meta": {
    "new": true
  },
  "type": "registry:ui"
}