Spaces:
Running
Running
"use client"; | |
import { motion } from "motion/react"; | |
import { Button } from "./ui/button"; | |
import { memo } from "react"; | |
interface SuggestedPromptsProps { | |
sendMessage: (input: string) => void; | |
} | |
function PureSuggestedPrompts({ sendMessage }: SuggestedPromptsProps) { | |
const suggestedActions = [ | |
{ | |
title: "What are the advantages", | |
label: "of using Next.js?", | |
action: "What are the advantages of using Next.js?", | |
}, | |
{ | |
title: "What is the weather", | |
label: "in San Francisco?", | |
action: "What is the weather in San Francisco?", | |
}, | |
]; | |
return ( | |
<div | |
data-testid="suggested-actions" | |
className="grid sm:grid-cols-2 gap-2 w-full" | |
> | |
{suggestedActions.map((suggestedAction, index) => ( | |
<motion.div | |
initial={{ opacity: 0, y: 20 }} | |
animate={{ opacity: 1, y: 0 }} | |
exit={{ opacity: 0, y: 20 }} | |
transition={{ delay: 0.05 * index }} | |
key={`suggested-action-${suggestedAction.title}-${index}`} | |
className={index > 1 ? "hidden sm:block" : "block"} | |
> | |
<Button | |
variant="ghost" | |
onClick={async () => { | |
sendMessage(suggestedAction.action); | |
}} | |
className="text-left border rounded-xl px-4 py-3.5 text-sm flex-1 gap-1 sm:flex-col w-full h-auto justify-start items-start" | |
> | |
<span className="font-medium">{suggestedAction.title}</span> | |
<span className="text-muted-foreground"> | |
{suggestedAction.label} | |
</span> | |
</Button> | |
</motion.div> | |
))} | |
</div> | |
); | |
} | |
export const SuggestedPrompts = memo(PureSuggestedPrompts, () => true); | |