Files
upstream-shadcn-ui/apps/v4/examples/base/questionnaire-dialog.tsx
upstream-mirror 1416db152c
All checks were successful
Release / Create Version PR or Publish Stable Release (push) Has been skipped
Release / Publish Prerelease to NPM (push) Has been skipped
Monitor Registries / Monitor registry health (push) Has been skipped
snapshot of https://github.com/shadcn-ui/ui.git (main, 2026-09-15; blobs > 131072B omitted)
2026-09-15 22:44:43 +05:00

125 lines
3.8 KiB
TypeScript

"use client"
import * as React from "react"
import { toast } from "sonner"
import { Button } from "@/styles/base-nova/ui/button"
import {
Dialog,
DialogClose,
DialogContent,
DialogDescription,
DialogFooter,
DialogHeader,
DialogTitle,
DialogTrigger,
} from "@/styles/base-nova/ui/dialog"
import {
Questionnaire,
QuestionnaireActions,
QuestionnaireChoice,
QuestionnaireChoices,
QuestionnaireDescription,
QuestionnaireError,
QuestionnaireItem,
QuestionnaireNext,
QuestionnairePrevious,
QuestionnaireProgress,
QuestionnaireSubmit,
QuestionnaireTitle,
} from "@/styles/base-nova/ui/questionnaire"
const items = [
{ name: "scope", required: true },
{ name: "tests", required: true },
] as const
export function QuestionnaireDialog() {
const [open, setOpen] = React.useState(false)
function handleSubmit(event: React.FormEvent<HTMLFormElement>) {
event.preventDefault()
const formData = new FormData(event.currentTarget)
setOpen(false)
toast("Clarification sent", {
description: `Scope: ${formData.get("scope") ?? "None"} · Verification: ${formData.get("tests") ?? "None"}`,
})
}
return (
<Dialog open={open} onOpenChange={setOpen}>
<DialogTrigger render={<Button variant="outline" />}>
Open clarification
</DialogTrigger>
<DialogContent>
<Questionnaire
defaultItem="scope"
items={items}
onSubmit={handleSubmit}
>
<QuestionnaireItem name="scope" required>
<DialogHeader>
<QuestionnaireProgress />
<QuestionnaireTitle render={<DialogTitle />}>
Which files are in scope?
</QuestionnaireTitle>
<QuestionnaireDescription render={<DialogDescription />}>
Choose how broadly the agent can update the workspace.
</QuestionnaireDescription>
</DialogHeader>
<QuestionnaireChoices>
<QuestionnaireChoice value="component">
Component only
</QuestionnaireChoice>
<QuestionnaireChoice value="feature">
Complete feature directory
</QuestionnaireChoice>
<QuestionnaireChoice value="workspace">
Any related workspace file
</QuestionnaireChoice>
</QuestionnaireChoices>
<QuestionnaireError />
</QuestionnaireItem>
<QuestionnaireItem name="tests" required>
<DialogHeader>
<QuestionnaireProgress />
<QuestionnaireTitle render={<DialogTitle />}>
How much verification is needed?
</QuestionnaireTitle>
<QuestionnaireDescription render={<DialogDescription />}>
Choose the checks the agent should run before handoff.
</QuestionnaireDescription>
</DialogHeader>
<QuestionnaireChoices>
<QuestionnaireChoice value="targeted">
Targeted tests
</QuestionnaireChoice>
<QuestionnaireChoice value="package">
Package tests
</QuestionnaireChoice>
<QuestionnaireChoice value="full">
Full workspace verification
</QuestionnaireChoice>
</QuestionnaireChoices>
<QuestionnaireError />
</QuestionnaireItem>
<DialogFooter>
<DialogClose render={<Button type="button" variant="outline" />}>
Cancel
</DialogClose>
<QuestionnaireActions>
<QuestionnairePrevious />
<QuestionnaireNext>Next</QuestionnaireNext>
<QuestionnaireSubmit>Send answer</QuestionnaireSubmit>
</QuestionnaireActions>
</DialogFooter>
</Questionnaire>
</DialogContent>
</Dialog>
)
}