"use client" import { Popover, PopoverContent, PopoverTrigger, } from "@mdxui/primitives/popover" import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger, } from "@mdxui/primitives/dialog" import { useState, useEffect } from "react" import { FeedbackTrigger } from "./feedback-trigger" import { FeedbackContent } from "./feedback-content" import type { FeedbackProps } from "./types" type FeedbackState = "idle" | "success" | "error" export function Feedback({ variant = "popover", side = "top", triggerLabel, title = "Give us feedback", user, context, captureMetadata = true, onSubmit, apiEndpoint, placeholder, submitLabel, className, }: FeedbackProps) { const [open, setOpen] = useState(false) const [state, setState] = useState("idle") const [errorMessage, setErrorMessage] = useState("") // Reset state when closed useEffect(() => { if (!open) { // Small delay to allow close animation const timer = setTimeout(() => { setState("idle") setErrorMessage("") }, 200) return () => clearTimeout(timer) } }, [open]) // Auto-close after success useEffect(() => { if (state === "success") { const timer = setTimeout(() => { setOpen(false) }, 1500) return () => clearTimeout(timer) } }, [state]) const handleSuccess = () => setState("success") const handleError = (error: string) => { setState("error") setErrorMessage(error) } const content = ( <> {state === "success" ? (

Thanks for your feedback!

) : ( <> {state === "error" && (

{errorMessage}

)} )} ) if (variant === "modal") { return ( {title} {content} ) } return (

{title}

{content}
) }