{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "questionnaire",
  "title": "Questionnaire",
  "description": "Questions asked one at a time, with choices, text answers and progress.",
  "dependencies": [
    "@shadcn/react",
    "lucide-react"
  ],
  "registryDependencies": [
    "@cupertinoui/macos-theme",
    "@cupertinoui/button"
  ],
  "files": [
    {
      "path": "registry/macos/ui/questionnaire.tsx",
      "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { Questionnaire as QuestionnairePrimitive } from \"@shadcn/react/questionnaire\"\nimport { CheckIcon } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nimport { buttonVariants, type Button } from \"@/registry/macos/ui/button\"\n\nfunction Questionnaire({\n  className,\n  ...props\n}: React.ComponentProps<typeof QuestionnairePrimitive.Root>) {\n  return (\n    <QuestionnairePrimitive.Root\n      data-slot=\"questionnaire\"\n      className={cn(\"flex w-full min-w-0 flex-col gap-4\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction QuestionnaireProgress({\n  className,\n  ...props\n}: React.ComponentProps<typeof QuestionnairePrimitive.Progress>) {\n  return (\n    <QuestionnairePrimitive.Progress\n      data-slot=\"questionnaire-progress\"\n      className={cn(\n        \"min-h-[1lh] w-fit min-w-[14ch] text-mac-subheadline font-medium text-mac-label-secondary tabular-nums\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction QuestionnaireItem({\n  className,\n  ...props\n}: React.ComponentProps<typeof QuestionnairePrimitive.Item>) {\n  return (\n    <QuestionnairePrimitive.Item\n      data-slot=\"questionnaire-item\"\n      className={cn(\n        \"flex min-w-0 flex-col gap-4 border-0 p-0 outline-none\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction QuestionnaireTitle({\n  className,\n  ...props\n}: React.ComponentProps<typeof QuestionnairePrimitive.Title>) {\n  return (\n    <QuestionnairePrimitive.Title\n      data-slot=\"questionnaire-title\"\n      className={cn(\n        \"text-[15px] leading-snug font-medium text-pretty [&:not(:has(~[data-slot=questionnaire-description]))]:mb-4\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction QuestionnaireDescription({\n  className,\n  ...props\n}: React.ComponentProps<typeof QuestionnairePrimitive.Description>) {\n  return (\n    <QuestionnairePrimitive.Description\n      data-slot=\"questionnaire-description\"\n      className={cn(\"text-mac-body text-pretty text-mac-label-secondary\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction QuestionnaireChoices({\n  className,\n  ...props\n}: React.ComponentProps<typeof QuestionnairePrimitive.Choices>) {\n  return (\n    <QuestionnairePrimitive.Choices\n      data-slot=\"questionnaire-choices\"\n      className={cn(\n        \"group/questionnaire-choices grid min-w-0 gap-2\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction QuestionnaireChoice({\n  children,\n  className,\n  ...props\n}: React.ComponentProps<typeof QuestionnairePrimitive.Choice>) {\n  return (\n    <QuestionnairePrimitive.Choice\n      data-slot=\"questionnaire-choice\"\n      className={cn(\n        \"group/questionnaire-choice relative flex min-h-11 cursor-pointer items-start gap-2.5 rounded-[8px] bg-transparent px-3 py-2.5 text-start text-mac-body shadow-[inset_0_0_0_1px_var(--mac-grid)] transition-colors outline-none select-none hover:bg-mac-fill-quaternary has-[>input:focus-visible]:mac-focus-ring data-invalid:shadow-[inset_0_0_0_1px_var(--mac-red)] data-checked:bg-mac-accent/8 data-checked:shadow-[inset_0_0_0_1px_color-mix(in_srgb,var(--mac-accent)_45%,transparent)]\",\n        \"data-disabled:pointer-events-none data-disabled:cursor-not-allowed data-disabled:opacity-50\",\n        className\n      )}\n      {...props}\n    >\n      <QuestionnairePrimitive.ChoiceInput\n        data-slot=\"questionnaire-choice-input\"\n        className=\"absolute inset-0 z-10 size-full cursor-pointer opacity-0\"\n      />\n      <span\n        aria-hidden=\"true\"\n        data-slot=\"questionnaire-choice-indicator\"\n        className=\"pointer-events-none relative flex size-4 shrink-0 translate-y-[--spacing(0.45)] items-center justify-center rounded-[5px] bg-mac-fill-primary 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:bg-mac-accent group-data-checked/questionnaire-choice:text-white\"\n      >\n        <span\n          data-slot=\"questionnaire-choice-indicator-dot\"\n          className=\"hidden size-2 rounded-full bg-white group-data-[type=checkbox]/questionnaire-choice:hidden group-data-checked/questionnaire-choice:block\"\n        />\n        <CheckIcon data-slot=\"questionnaire-choice-indicator-check\" className=\"hidden size-3.5 group-data-[type=radio]/questionnaire-choice:hidden group-data-checked/questionnaire-choice:block\" strokeWidth={3} />\n      </span>\n      <QuestionnairePrimitive.ChoiceLabel\n        data-slot=\"questionnaire-choice-label\"\n        className=\"flex min-w-0 flex-1 flex-col gap-0.5 leading-snug\"\n      >\n        {children}\n      </QuestionnairePrimitive.ChoiceLabel>\n      <QuestionnairePrimitive.ChoiceShortcut\n        data-slot=\"questionnaire-choice-shortcut\"\n        className=\"pointer-events-none ms-auto hidden size-5 shrink-0 translate-y-[--spacing(0.45)] items-center justify-center rounded-[6px] border border-mac-grid bg-mac-window font-mono text-[0.625rem] leading-none font-medium text-mac-label-secondary group-has-data-[slot=questionnaire-choice-description]/questionnaire-choice:translate-y-0.5 group-data-[shortcut]/questionnaire-choice:inline-flex\"\n      />\n    </QuestionnairePrimitive.Choice>\n  )\n}\n\nfunction QuestionnaireChoiceDescription({\n  className,\n  ...props\n}: React.ComponentProps<\"span\">) {\n  return (\n    <span\n      data-slot=\"questionnaire-choice-description\"\n      className={cn(\"text-mac-label-secondary\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction QuestionnaireInput({\n  className,\n  ...props\n}: React.ComponentProps<typeof QuestionnairePrimitive.Input>) {\n  return (\n    <div\n      data-slot=\"questionnaire-input-wrapper\"\n      className=\"group/questionnaire-input relative w-full min-w-0\"\n    >\n      <QuestionnairePrimitive.Input\n        data-slot=\"questionnaire-input\"\n        className={cn(\n          \"h-7 w-full min-w-0 rounded-[6px] bg-mac-field px-2 text-mac-body font-medium text-mac-label shadow-[0_0_0_1px_var(--mac-field-border)] transition-[box-shadow] outline-none placeholder:font-normal placeholder:text-mac-label-tertiary focus-visible:shadow-[0_0_0_1px_var(--mac-field-border),0_0_0_3.5px_color-mix(in_srgb,var(--mac-accent)_50%,transparent)] disabled:pointer-events-none disabled:opacity-50 aria-invalid:shadow-[0_0_0_3.5px_color-mix(in_srgb,var(--mac-red)_50%,transparent)]\",\n          \"selection:bg-mac-accent selection:text-white placeholder:text-mac-label-secondary\",\n          className\n        )}\n        {...props}\n      />\n    </div>\n  )\n}\n\nfunction QuestionnaireError({\n  className,\n  ...props\n}: React.ComponentProps<typeof QuestionnairePrimitive.Error>) {\n  return (\n    <QuestionnairePrimitive.Error\n      data-slot=\"questionnaire-error\"\n      className={cn(\"mt-2 text-mac-body text-mac-red\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction QuestionnaireActions({\n  className,\n  ...props\n}: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"questionnaire-actions\"\n      className={cn(\n        \"grid min-h-11 w-full grid-cols-[minmax(0,1fr)_auto_auto] items-center gap-2 sm:min-h-8\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction QuestionnairePrevious({\n  children,\n  className,\n  size = \"default\",\n  variant = \"outline\",\n  ...props\n}: React.ComponentProps<typeof QuestionnairePrimitive.Previous> &\n  Pick<React.ComponentProps<typeof Button>, \"size\" | \"variant\">) {\n  return (\n    <QuestionnairePrimitive.Previous\n      data-slot=\"questionnaire-previous\"\n      data-size={size}\n      data-variant={variant}\n      className={cn(\n        buttonVariants({ size, variant }),\n        \"col-start-1 row-start-1 min-h-11 justify-self-start sm:min-h-0\",\n        className\n      )}\n      {...props}\n    >\n      {children ?? \"Previous\"}\n    </QuestionnairePrimitive.Previous>\n  )\n}\n\nfunction QuestionnaireSkip({\n  children,\n  className,\n  size = \"default\",\n  variant = \"outline\",\n  ...props\n}: React.ComponentProps<typeof QuestionnairePrimitive.Skip> &\n  Pick<React.ComponentProps<typeof Button>, \"size\" | \"variant\">) {\n  return (\n    <QuestionnairePrimitive.Skip\n      data-slot=\"questionnaire-skip\"\n      data-size={size}\n      data-variant={variant}\n      className={cn(\n        buttonVariants({ size, variant }),\n        \"col-start-2 row-start-1 min-h-11 justify-self-end sm:min-h-0\",\n        className\n      )}\n      {...props}\n    >\n      {children ?? \"Skip\"}\n    </QuestionnairePrimitive.Skip>\n  )\n}\n\nfunction QuestionnaireNext({\n  children,\n  className,\n  size = \"default\",\n  variant = \"default\",\n  ...props\n}: React.ComponentProps<typeof QuestionnairePrimitive.Next> &\n  Pick<React.ComponentProps<typeof Button>, \"size\" | \"variant\">) {\n  return (\n    <QuestionnairePrimitive.Next\n      data-slot=\"questionnaire-next\"\n      data-size={size}\n      data-variant={variant}\n      className={cn(\n        buttonVariants({ size, variant }),\n        \"col-start-3 row-start-1 min-h-11 justify-self-end sm:min-h-0\",\n        className\n      )}\n      {...props}\n    >\n      {children ?? \"Next\"}\n    </QuestionnairePrimitive.Next>\n  )\n}\n\nfunction QuestionnaireSubmit({\n  children,\n  className,\n  size = \"default\",\n  variant = \"default\",\n  ...props\n}: React.ComponentProps<typeof QuestionnairePrimitive.Submit> &\n  Pick<React.ComponentProps<typeof Button>, \"size\" | \"variant\">) {\n  return (\n    <QuestionnairePrimitive.Submit\n      data-slot=\"questionnaire-submit\"\n      data-size={size}\n      data-variant={variant}\n      className={cn(\n        buttonVariants({ size, variant }),\n        \"col-start-3 row-start-1 min-h-11 justify-self-end sm:min-h-0\",\n        className\n      )}\n      {...props}\n    >\n      {children ?? \"Submit\"}\n    </QuestionnairePrimitive.Submit>\n  )\n}\n\nexport {\n  Questionnaire,\n  QuestionnaireActions,\n  QuestionnaireChoice,\n  QuestionnaireChoiceDescription,\n  QuestionnaireChoices,\n  QuestionnaireDescription,\n  QuestionnaireError,\n  QuestionnaireInput,\n  QuestionnaireItem,\n  QuestionnaireNext,\n  QuestionnairePrevious,\n  QuestionnaireProgress,\n  QuestionnaireSkip,\n  QuestionnaireSubmit,\n  QuestionnaireTitle,\n}\n",
      "type": "registry:ui"
    }
  ],
  "type": "registry:ui"
}