import { ArrowUpRight, LockIcon, Copy, Check } from "lucide-react"; import { HoverCard, HoverCardContent, HoverCardTrigger, } from "@/src/components/ui/hover-card"; import { CodeMirrorEditor } from "@/src/components/editor"; import type { Prisma } from "@langfuse/shared"; import { Button } from "@/src/components/ui/button"; import { Separator } from "@/src/components/ui/separator"; import { useMemo, useState } from "react"; import { generateSchemaExample } from "../lib/generateSchemaExample"; import { copyTextToClipboard } from "@/src/utils/clipboard"; type DatasetSchemaHoverCardProps = { schema: Prisma.JsonValue; schemaType: "input" | "expectedOutput"; showLabel?: boolean; }; export const DatasetSchemaHoverCard: React.FC = ({ schema, schemaType, showLabel = false, }) => { const title = schemaType === "input" ? "Input Schema" : "Expected Output Schema"; const schemaString = JSON.stringify(schema, null, 2); // Generate example object from schema const exampleObject = useMemo(() => generateSchemaExample(schema), [schema]); // State for copy button feedback const [copied, setCopied] = useState(false); const handleCopyExample = async () => { if (!exampleObject) return; await copyTextToClipboard(exampleObject); setCopied(true); setTimeout(() => setCopied(false), 2000); }; return (

{title}

Learn more about{" "} JSON Schema

{}} // Read-only minHeight="none" className="max-h-[250px] overflow-y-auto" editable={false} />
{exampleObject && ( <>

Example Object

)}
); };