Files
kolaytercih/src/components/ui/prompt-suggestion.tsx
bilalgursen e62c6f07df
Some checks failed
Deploy / deploy (push) Failing after 1h28m6s
Update package.json scripts, enhance layout with new components, and improve API error handling
- Added new scripts for database operations and temporary production in package.json.
- Integrated KaydetBannerLazy component into the layout for improved user notifications.
- Enhanced API error handling in the soru route to mark credit exhaustion.
- Updated the IletisimPage for better button styling and user experience.
- Refactored ListemPage to streamline user flow and improve session handling.
- Removed unused ListePaneli component to clean up the codebase.
2026-08-06 02:27:42 +03:00

118 lines
2.9 KiB
TypeScript

"use client"
import { Button, buttonVariants } from "@/components/ui/button"
import { cn } from "@/lib/utils"
import { VariantProps } from "class-variance-authority"
export type PromptSuggestionProps = {
children: React.ReactNode
variant?: VariantProps<typeof buttonVariants>["variant"]
size?: VariantProps<typeof buttonVariants>["size"]
className?: string
highlight?: string
} & React.ButtonHTMLAttributes<HTMLButtonElement>
function PromptSuggestion({
children,
variant,
size,
className,
highlight,
...props
}: PromptSuggestionProps) {
const isHighlightMode = highlight !== undefined && highlight.trim() !== ""
const content = typeof children === "string" ? children : ""
if (!isHighlightMode) {
return (
<Button
variant={variant || "outline"}
size={size || "lg"}
className={cn(className)}
{...props}
>
{children}
</Button>
)
}
if (!content) {
return (
<Button
variant={variant || "ghost"}
size={size || "sm"}
className={cn(
"w-full cursor-pointer justify-start py-2",
"hover:bg-accent",
className
)}
{...props}
>
{children}
</Button>
)
}
const trimmedHighlight = highlight.trim()
const contentLower = content.toLowerCase()
const highlightLower = trimmedHighlight.toLowerCase()
const shouldHighlight = contentLower.includes(highlightLower)
return (
<Button
variant={variant || "ghost"}
size={size || "sm"}
className={cn(
"w-full cursor-pointer justify-start gap-0 py-2",
"hover:bg-accent",
className
)}
{...props}
>
{shouldHighlight ? (
(() => {
const index = contentLower.indexOf(highlightLower)
if (index === -1)
return (
<span className="text-muted-foreground whitespace-pre-wrap">
{content}
</span>
)
const actualHighlightedText = content.substring(
index,
index + highlightLower.length
)
const before = content.substring(0, index)
const after = content.substring(index + actualHighlightedText.length)
return (
<>
{before && (
<span className="text-muted-foreground whitespace-pre-wrap">
{before}
</span>
)}
<span className="text-primary font-medium whitespace-pre-wrap">
{actualHighlightedText}
</span>
{after && (
<span className="text-muted-foreground whitespace-pre-wrap">
{after}
</span>
)}
</>
)
})()
) : (
<span className="text-muted-foreground whitespace-pre-wrap">
{content}
</span>
)}
</Button>
)
}
export { PromptSuggestion }