Some checks failed
Deploy / deploy (push) Failing after 1h28m6s
- 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.
118 lines
2.9 KiB
TypeScript
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 }
|