a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4",
+ className,
+ )}
+ {...props}
+ />
+ );
+}
+
+function EmptyContent({ className, ...props }: React.ComponentProps<"div">) {
+ return (
+
+ );
+}
+
+export { Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle };
diff --git a/packages/ui/src/components/questionnaire.tsx b/packages/ui/src/components/questionnaire.tsx
new file mode 100644
index 000000000..f7e65def1
--- /dev/null
+++ b/packages/ui/src/components/questionnaire.tsx
@@ -0,0 +1,282 @@
+import type * as React from "react";
+import type { Button } from "./button";
+import { CheckIcon } from "@phosphor-icons/react";
+import { Questionnaire as QuestionnairePrimitive } from "@shadcn/react/questionnaire";
+import { cn } from "@reactive-resume/utils/style";
+import { buttonVariants } from "./button";
+
+function Questionnaire({ className, ...props }: React.ComponentProps
) {
+ return (
+
+ );
+}
+
+function QuestionnaireProgress({ className, ...props }: React.ComponentProps) {
+ return (
+
+ );
+}
+
+function QuestionnaireItem({ className, ...props }: React.ComponentProps) {
+ return (
+
+ );
+}
+
+function QuestionnaireTitle({ className, ...props }: React.ComponentProps) {
+ return (
+
+ );
+}
+
+function QuestionnaireDescription({
+ className,
+ ...props
+}: React.ComponentProps) {
+ return (
+
+ );
+}
+
+function QuestionnaireChoices({ className, ...props }: React.ComponentProps) {
+ return (
+
+ );
+}
+
+function QuestionnaireChoice({
+ children,
+ className,
+ ...props
+}: React.ComponentProps) {
+ return (
+ input:focus-visible]:border-ring has-[>input:focus-visible]:ring-3 has-[>input:focus-visible]:ring-ring/50 data-checked:border-primary/40 data-invalid:border-destructive data-checked:bg-muted dark:bg-input/20 dark:data-checked:bg-muted",
+ "data-disabled:pointer-events-none data-disabled:cursor-not-allowed data-disabled:opacity-50",
+ className,
+ )}
+ {...props}
+ >
+
+
+
+
+
+
+ {children}
+
+
+
+ );
+}
+
+function QuestionnaireChoiceDescription({ className, ...props }: React.ComponentProps<"span">) {
+ return (
+
+ );
+}
+
+function QuestionnaireInput({ className, ...props }: React.ComponentProps) {
+ return (
+
+
+
+ );
+}
+
+function QuestionnaireError({ className, ...props }: React.ComponentProps) {
+ return (
+
+ );
+}
+
+function QuestionnaireActions({ className, ...props }: React.ComponentProps<"div">) {
+ return (
+
+ );
+}
+
+function QuestionnairePrevious({
+ children,
+ className,
+ size = "default",
+ variant = "outline",
+ ...props
+}: React.ComponentProps &
+ Pick, "size" | "variant">) {
+ return (
+
+ {children ?? "Previous"}
+
+ );
+}
+
+function QuestionnaireSkip({
+ children,
+ className,
+ size = "default",
+ variant = "outline",
+ ...props
+}: React.ComponentProps &
+ Pick, "size" | "variant">) {
+ return (
+
+ {children ?? "Skip"}
+
+ );
+}
+
+function QuestionnaireNext({
+ children,
+ className,
+ size = "default",
+ variant = "default",
+ ...props
+}: React.ComponentProps &
+ Pick, "size" | "variant">) {
+ return (
+
+ {children ?? "Next"}
+
+ );
+}
+
+function QuestionnaireSubmit({
+ children,
+ className,
+ size = "default",
+ variant = "default",
+ ...props
+}: React.ComponentProps &
+ Pick, "size" | "variant">) {
+ return (
+
+ {children ?? "Submit"}
+
+ );
+}
+
+export {
+ Questionnaire,
+ QuestionnaireActions,
+ QuestionnaireChoice,
+ QuestionnaireChoiceDescription,
+ QuestionnaireChoices,
+ QuestionnaireDescription,
+ QuestionnaireError,
+ QuestionnaireInput,
+ QuestionnaireItem,
+ QuestionnaireNext,
+ QuestionnairePrevious,
+ QuestionnaireProgress,
+ QuestionnaireSkip,
+ QuestionnaireSubmit,
+ QuestionnaireTitle,
+};